数字证书及安全加密(四)使用CA签发的服务器证书并验证证书链

在上一篇的实践中配置成功了双向SSL,但是使用的是本地用keytool生成的证书而非真正的服务器证书;而且对用户证书的校验仅仅是将用户公钥添加至服务器信任证书库,真正面对大量用户时不可能在服逐个添加用户公钥证书;客户端程序访问多个不同的服务器时也不应该将服务器公钥全部配置进客户端信任证书库。

本篇是如何使用CA签发的服务器证书配置SSL和配置tomcat使用证书链的实践。

1.申请并签发服务器证书
具体过程参考水墨江南的技术博文 http://zhuyuehua.iteye.com/blog/1101054

签发的服务器证书中应该包含一张含私钥的证书、根CA证书、服务器CA证书、设备证书。

签发的服务器证书为keystore.jks,密码为password。
d:
cd %JAVA_HOME%/bin
keytool -v -list -keystore D:/lib/keystore.jks -storetype jks -storepass password

查看服务器证书内容,结果如下:
  • itrusca, 2014-1-21, PrivateKeyEntry,
  • server-mid, 2014-1-21, trustedCertEntry,
  • server-root, 2014-1-21, trustedCertEntry,
  • server, 2014-1-21, trustedCertEntry,

其中的PrivateKeyEntry就是服务器证书,剩下三张分别为服务器CA证书、根CA证书和设备证书。
证书链的证书路径是:根CA证书》服务器CA证书》设备证书》服务器证书。

2.签发带证书链的用户证书
用户证书为user.pfx,密码为password。
查看用户证书信息
keytool -list -keystore D:/lib/user.pfx -storetype pkcs12 -storepass password

可以看到有一张带私钥的证书
  • user, 2014-1-23, PrivateKeyEntry

以及证书链路径:根CA》用户CA》用户证书。

3.导出用户CA证书
需要将用户CA从用户证书链中导出。

双击user.pfx,将用户证书导入系统证书库中。

在系统证书列表中,选中刚导入的用户证书》点击“查看”按钮查看证书信息》点击“证书路径”选项卡查看证书路径》选中用户CA证书后点击“查看证书”按钮查看用户CA证书信息》点击证书窗口中的“详细信息”选项卡》点击“复制到文件”按钮》存储至:D/lib/ca-mid.cer。

4.将用户CA证书导入服务端信任证书库
keytool -import -file D:/lib/ca-mid.cer -keystore D:/lib/servertrust.jks -alias ca-mid -keypass password -storepass password
keytool -list -keystore D:/lib/servertrust.jks -storepass password 


5.tomcat配置
tomcat/conf/server.xml中关于证书库配置如下
           keystoreFile="D:/lib/keystore.jks"    
           keystorePass="password"
           truststoreFile="D:/lib/servertrust.jks"    
           truststorePass="password"
           

重启tomcat后,使用浏览器访问https://server:8443/,使用user证书访问成功。

使用客户端程序访问https服务时该如何配置?参考第三篇博文中的配置内容。

6.将服务器证书导入客户端信任证书库
需要先将服务器公钥证书从keystore.jks中导出。
keytool -export -alias itrusca -keystore D:/lib/keystore.jks -rfc -file D:/lib/itrusca.cer -storepass password  -keypass password

导入至客户端信任证书库
keytool -import -file D:/lib/itrusca.cer -keystore D:/lib/clienttrust.jks -alias itrusca -keypass password -storepass password
keytool -list -keystore D:/lib/clienttrust.jks -storepass password 



6.客户端程序访问
客户端程序配置虚拟机参数
 -Djavax.net.ssl.keyStore=D:/lib/user.pfx -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.trustStore=D:/lib/clienttrust.jks -Djavax.net.ssl.trustStorePassword=password -Djavax.net.ssl.trustStoreType=JKS

或在程序内加载客户端证书库及信任证书库后可访问https服务。

7.用户CA签发的其他用户证书
在系统证书库中装载其他由用户CA签发的用户证书后,可在浏览器使用该证书访问https服务,说明服务端配置信任用户CA证书链成功。


在程序中,如果遇到需要连接多个由同一服务器CA证书签发的服务器证书时该怎么办?很简单,参照服务端信任用户CA一样,只要让客户端信任服务器证书的上级证书(服务器CA证书)即可。

8.导出服务器CA证书
keytool -export -alias server-mid -keystore D:/lib/keystore.jks -rfc -file D:/lib/server-mid.cer -storepass password  -keypass password


9.将服务器CA证书导入客户端信任证书库
删除D:/lib/clienttrust.jks后,
keytool -import -file D:/lib/server-mid.cer -keystore D:/lib/clienttrust.jks -alias server-mid -keypass password -storepass password
keytool -list -keystore D:/lib/clienttrust.jks -storepass password 


10.服务器CA证书签发的其他服务器证书
使用客户端程序连接至同一体系下的其他服务器证书时,测试访问https服务成功,说明客户端配置信任服务器CA证书链成功。

你可能感兴趣的:(httpclient,ssl,https,ca)