在上一篇的实践中配置成功了双向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证书链成功。
分享到:
相关推荐
学习RSA算法,读取数字证书中的私钥对文件进行加密,使用数字证书的公钥解密,这种方式就是RSA算法.
关于证书和数字加密方面的信息,是整个数字证书和加密方面的概要介绍。
java rsa证书加密,crt、pem、pfx、cer等 内附工具
可以模拟CA的功能,有源代码、可以颁发数字证书和进行加密、解密
zabbix配置数字证书加密.docx
使用X.509数字证书加密解密,使用RSA证书加密敏感数据
Android安全加密:数字签名和数字证书 Android安全加密:Https编程 以上学习所有内容,对称加密、非对称加密、消息摘要、数字签名等知识都是为了理解数字证书工作原理而作为一个预备知识。数字证书是密码学里的...
发行者证书测试工具 Cert2spc_exe:可以从CER文件生成SPC证书。 签名工具 SignTool_exe:对exe,dll等文件签名。 证书创建工具 Makecert_...文件加密解密工具zxfutl.exe:使用证书和私钥对文件进行加密解密,封包解包。
是学习CA 数字证书的好资料,密钥对、数字证书和CA,什么是RSA,数字证书,X.509标准,X.509证书格式,很值得一看啊。
详细介绍了区块链使用的不对称加密在数字证书数字签名的应用
数字证书原理,公钥私钥加密原理基础概念和原理,数字证书的管理与使用
java公钥加密私钥解密与数字证书,数字证书的生成看这里 http://hi.baidu.com/chenminliang/blog/item/2b30db24920ae0338744f9db.html
基于椭圆曲线密码体制的本地实现的CA(证书授权中心)和数字证书签发系统
1:调用.NET2.0的MAKECERT创建含有私钥的数字证书,并存储到个人证书区; 2:将该证书导出为pfx文件,并为其指定一个用来打开pfx文件的password; 3:读取pfx文件,导出pfx中公钥和私钥; 4:用pfx证书中的公钥进行...
这是我们老师给我们的关于数字证书与加密认证的试验。PDF格式的。
数字证书服务器的安装,数字证书的申请,数字证书用来对邮件加密解密,数字证书用来建立安全电子商务网站
文档加密解密,数字证书,密钥生成,聊天加密,以及界面设计
利用数字证书实现电子邮件的数字签名和加密(图解)
本文主要介绍CA数字证书的基本原理和关键技术,以及数字证书的相关机构以及应用,结合实际案例分析CA数字证书的组成,涉及的非对称密码等关键技术。适合对数字证书、数字签名加密感兴趣的同学。
OneNet MQTT 接入CA证书