关于OpenSSL支持USB-KEY证书的尝试

因本人工作需要,需要在OpenSSL中访问USB-KEY中的证书和服务器建立连接。

在神童哥的帮助下,得出二种实现方式。

1、 如果USB-KEY的驱动程序支持PKCS#11接口,则OpenSSL通过engine可以比较方便地访问USB-KEY。

2、 听说最新版本的OpenSSL 0.9.8i版本已经增WINDOWS CAPI的支持。

因本人比较懒,就直接尝试了OpenSSL 0.9.8i版本。

在网上参考了这个网站的信息

http://markmail.org/message/hrrq3hhciz6vml6w#query:OPENSSL%20CryptoAPI%20ENGINE+page:1+mid:ufpkpzqtk5ohn5hz+state:results

有兴趣的朋友可以去看看。



好,现在开始工作。

1、 下载OpenSSL 0.9.8i,并解包,地址:

http://www.openssl.org/source/openssl-0.9.8i.tar.gz

2、 下载ActivePerl,并安装,地址:

http://www.activestate.com/Products/activeperl/index.mhtml

3、 编译库,因为OpenSSL 0.9.8i默认是不打开CAPI支持的,所以在编译前先修改配置。因为我用的是VC,所以用

perl Configure VC-WIN32 enable-capieng -DOPENSSL_SSL_CLIENT_ENGINE_AUTO=capi -DOPENSSL_CAPIENG_DIALOG 

先打开enable-capieng,再把SSL_CLIENT的ENGINE自动指向CAPI

4、 开始编译,编译都一样,我就不多说了,网上资料多的是。

经过上面步骤,库的编译就完成了。



下面开始测试。

以前我用OPENSSL做CLINET的时候,是通过文件证书方式提供,不提供证书,对那些需要客户端证书的网站是无法访问。

基于这个前提,进行了以下试验。

进行对USB-KEY的试验(特别说明,试验用的USB-KEY是公安专用,所以第一次访问USB-KEY时会要求输入KEY的密码,并在公安内网中进行试验。)

1、 用新编译的软件发起HTTPS页面请求,软件弹出公安KEY的密码输入窗口。(可以证明去访问了CAPI,并成功访问到该USB)。

2、 输入密码后,返回的页面中带有USB-KEY主人的信息。(被证明USB-KEY支持成功)

3、 拨出USB-KEY,再次请求该页面。返回的页面中不带任何人员信息,直接跳转到登录窗口。

4、 再次插入(测试软件不重启),再次请求HTTPS,又出现密码输入窗口,输入密码后,成功访问页面,页面中并带有USB-KEY主人的信息。

5、 再次请求该页面,没有出现密码输入窗口,页面返回正常,即同样带有USB-KEY主人的信息。

通过以上五步测试,证明新编译的OPENSSL 0.9.8i版本可以自动的向CAPI进行调用。这给需要在OPENSSL中支持CAPI接口的开发者来说是一种福音,至少对我来说是,不用自己写代码,还要测试等等,呵呵。

这个版本好像只支持WINDOWS下的CAPI接口,LINUX下的不清楚了。就说到这里,本着OPENSSL开源的原则,我把我的测试经过供大家参考。以后如果有类似需求的朋友可以尝试一下。
======================================================= 目录 & 说明 ======================================================= ECCdemo 通过PKCS#11接口创建ECC密钥对,并进行签名和验签操作; ------------------------------------------------------- EnumObj 通过PKCS#11接口列举出Token中的各种对象,如证书,公钥,私钥,秘密密钥; ------------------------------------------------------- exportcert 通过PKCS#11接口输出Token中的证书的一些属性; ------------------------------------------------------- FormatKey 格式化Token,并重新划分公私有区大小,设置PIN码重试次数和密钥对数量。 ------------------------------------------------------- GetUSBInfos 通过PKCS#11接口获得slot, cryptoki, token的属性信息; ------------------------------------------------------- GuoMiTest 通过PKCS#11接口产生ssf33和scb2密钥,并进行加解密运算; ------------------------------------------------------- HMACTest 通过PKCS#11接口产生GENERIC SECRET密钥,并进行HMAC-SHA1功能验证; ------------------------------------------------------- InitToken 通过PKCS#11接口实现初始化操作,并进行Ansi和Utf8字符转换; ------------------------------------------------------- OTPDemo 通过PKCS#11接口产生HOTP密钥,并产生OTP结果; ------------------------------------------------------- PKCSDemo 通过PKCS#11接口创建RSA密钥对,并进行签名、加密、签名验证和解密的运算; ------------------------------------------------------- PKCStest 通过PKCS#11接口产生多种类型的密钥,如DES/3DES/RC2/RC4/RSA,并进行加解密运算; ------------------------------------------------------- 注:除Microsoft Visual C++外,你需要另外安装 Microsoft Platform SDK,并把SDK安装目录中的 include目录和lib目录分别放置在VC开发环境选项 (对于VC6来说,是菜单中Tools->Options...弹出的 对话框中的Directories页)中的目录(include) 和库(lib)中VC++的路径之前才能够正确编译链接运 行。
### 如何安装CA证书的操作指南 #### 准备工作 在开始之前,确保已经获取到所需的CA证书文件(通常为`.cer`或`.crt`格式)。如果尚未生成CA证书,则可以参考工具如OpenSSL或CFSSL来创建根证书和相关组件的证书。 #### 安装过程 以下是针对不同环境下的CA证书安装方法: --- ##### **Linux环境下安装Java CA证书** 对于基于Java的应用程序,在Linux环境中可以通过以下命令将CA证书导入到Java的信任库中: ```bash cd $JAVA_HOME/jre/lib/security/ wget --no-check-certificate https://example.com/path/to/yourRootCA.cer keytool -keystore cacerts -importcert -alias yourRootCA -file yourRootCA.cer -storepass changeit -noprompt chmod 755 -R $JAVA_HOME/jre/lib/security/cacerts ``` 此操作会将指定路径中的CA证书导入至Java的安全信任存储区,并设置默认密码`changeit`[^1]。 --- ##### **Kubernetes集群中配置自定义CA证书** 当部署Kubernetes集群时,为了实现TLS双向认证,需先构建自签名CA及其子证书。具体步骤如下: 1. 下载并安装CFSSL工具集用于生成证书。 ```bash mkdir -p $SSL_BIN_PATH/bin &&> /dev/null 2>&1 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -P $SSL_BIN_PATH/bin/ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -P $SSL_BIN_PATH/bin/ wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -P $SSL_BIN_PATH/bin/ cd $SSL_BIN_PATH/bin/ mv cfssl_linux-amd64 cfssl && mv cfssljson_linux-amd64 cfssljson mv cfssl-certinfo_linux-amd64 cfssl-certinfo chmod +x * && ln -sf $SSL_BIN_PATH/bin/cfssl* /usr/local/bin/ ``` 2. 使用CFSSL生成根证书(CA)以及各个组件所需的具体证书[^2]。 --- ##### **Windows操作系统下手动安装CA证书** 在Windows平台上可通过图形界面完成CA证书的手动安装流程: 1. 双击下载好的`.cer`或者`.crt`文件; 2. 按照弹窗指引选择“将所有的证书都放入下列储存位置”,点击浏览按钮定位到受信根证书颁发机构列表; 3. 确认保存更改即可生效。 注意:部分场景可能还需要额外安装对应的硬件驱动支持才能正常使用某些类型的USB Key形式承载的企业级数字证书产品[^4]。 --- ##### **Web服务器Apache/Nginx加载CA中间链** 为了让客户端浏览器能够验证网站的真实性,还需确保证书链条完整上传到了web server端。例如Nginx配置样例: ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/fullchain.pem; # 包含中级CA在内的整个链条 ssl_certificate_key /path/to/private.key; # 私钥文件 ... } ``` --- #### 注意事项 - 不同版本的操作系统、应用软件可能会有不同的处理方式,请参照官方文档进一步确认细节差异。 - 如果遇到权限不足错误,请尝试通过sudo提升执行权限后再重试相应指令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值