本篇是如何使用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证书链成功。