用keytool制作证书并在tomcat配置https服务(四)
用keytool制作证书并在tomcat配置https服务(一)
用keytool制作证书并在tomcat配置https服务(二)
用keytool制作证书并在tomcat配置https服务(三)
上一篇我们实现了服务端自己模拟CA认证,那么有个问题。
一个客户端和服务端对接就需要把这个客户端的证书拿来导入到服务端的密钥库中。那么很多客户端要对接,就要多次导入。
可以这样,让客户端发送证书的csr文件给我们,我们用模拟的CA密钥库对客户端证书也进行签名颁发。
然后把签名后的证书发送给他,让他自己导入到自己的客户端密钥库里【也需要先导入根证书,再导入签名证书】。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
这样的话https交互时,
服务端发送签名证书给客户端:客户端能用安装在浏览器中的【受信任的颁发机构】中的rootca.cer根证书进行验证。
客户端发送签名证书给服务端:服务端也能用信任的库里的rootca根证书对客户端发来签名证书进行校验。
为了清晰点,从头开始做,就不展示图片了。
服务端:
1.创建CA库,用于对证书签名
keytool -genkey -alias rootca -keypass 123456 -keyalg RSA -keysize 2048 -validity 365 -storetype JKS -keystore D:/ssl/castore.jks -storepass 123456
2.创建服务端密钥库
keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 2048 -validity 365 -storetype JKS -keystore D:/ssl/keystore.jks -storepass 123456
3.创建服务端证书签名请求文件
keytool -certreq -keyalg RSA -alias tomcat -sigalg SHA256withRSA -keystore D:/ssl/keystore.jks -file D:/ssl/serverreq.csr
4.CA库对服务端证书进行签名,生成一个证书文件
keytool -gencert -alias rootca -keystore D:/ssl/castore.jks -infile D:/ssl/serverreq.csr -outfile D:/ssl/signedserver.cer
5.从CA库导出rootca根证书
keytool -export -alias rootca -keystore D:/ssl/castore.jks -storetype JKS -keypass 123456 -file D:/ssl/rootca.cer
6.将rootca导入到服务端密钥库
keytool -import -v -alias rootca -file D:/ssl/rootca.cer -keystore D:/ssl/keystore.jks
7.将服务端签名证书导入到服务端的密钥库,覆盖原证书。
keytool -import -v -alias tomcat -file D:/ssl/signedserver.cer -keystore D:/ssl/keystore.jks
8.tomcat的server.xml添加配置【clientAutl=true,双向认证】
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="D:/ssl/keystore.jks"
keystorePass="123456"
truststoreFile="D:/ssl/keystore.jks"
truststorePass="123456"
clientAuth="true" sslProtocol="TLS" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" />
客户端:
1.创建客户端密钥库
keytool -genkey -alias client -keypass 123456 -keyalg RSA -keysize 2048 -validity 365 -storetype JKS -keystore D:/ssl/client.jks -storepass 123456
2.创建客户端证书签名请求文件
keytool -certreq -keyalg RSA -alias client -sigalg SHA256withRSA -keystore D:/ssl/client.jks -file D:/ssl/clientreq.csr
3.把客户端证书签名请求文件clientreq.csr发送给服务端,服务端的模拟CA密钥库对证书进行签名,生成一个证书文件【以下这条是服务端执行】
keytool -gencert -alias rootca -keystore D:/ssl/castore.jks -infile D:/ssl/clientreq.csr -outfile D:/ssl/signedclient.cer
4.服务端把生成的客户端签名文件signedclient.cer和根证书rootca.cer发送给客户,客户端导入密钥库。还是先导入根证书,再导入签名证书。
keytool -import -v -alias rootca -file D:/ssl/rootca.cer -keystore D:/ssl/client.jks
keytool -import -v -alias client -file D:/ssl/signedclient.cer -keystore D:/ssl/client.jks
5.浏览器不支持jks,所以把客户端的jks库转为p12格式库。
keytool -importkeystore -srckeystore D:/ssl/client.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore D:/ssl/client.p12
6.将客户端密钥库client.p12导入到浏览器-证书-个人
7.将rootca.cer导入到浏览器-证书-受信任的证书颁发机构
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
启动tomcat,访问成功
查看下服务端证书是不是这个
keytool -list -v -keystore D:/ssl/keystore.jks
备注:我们看到tomcat的server.xml配置有个keystoreFile和truststoreFile
keystoreFile是用来向客户端发送服务端证书的库配置。
truststoreFile是用来存放信任证书的库位置。用来校验客户端发来的证书是不是受信任的。
上边的例子我们都存在了keystore.jks,因为里边就有rootca,可以进行验证。
不嫌麻烦的话,我们可以单独创建一个库trustkeystore.jks,存放rootca,然后tomcat的server配置修改下路径就好了。
还有理论上说keytool创建的库密码和密钥对的密码可以不一样。但是tomcat这里只留有一个密钥库密码输入参数,所以最好创建库密码和密钥对密码一致。
最新文章
- C语言 &#183; 最小公倍数
- C#-WinForm-用户控件如何获取父级窗体
- mysql-利润set变量模拟分组查询每组中的第N条数据
- Node.js GET/POST请求
- JS函数和变量
- Tomcat AccessLog 格式化
- 小插曲之变量和字符串 - 零基础入门学习Python003
- Leetcode 226 Invert Binary Tree python
- unity3D 锁屏再开程序崩溃
- [原创]C语言里为何会有“2+2=5”的结果
- onchange、onclick、onblur等事件区别
- Oracle_单行函数
- 抓包工具Charles安装时需要注意的地方
- js 设备判断(移动端pc端 安卓ios 微信)
- protobuf example make backup
- Raw Socket vs Stream Socket vs datagram socket,原始套接字与流式套接字与数据报套接字
- Redis 的 GEO 特性将在 Redis 3.2 版本释出
- SaltStack自动化安装zabbix-server
- css dropdown menu
- 算法Sedgewick第四版-第1章基础-1.4 Analysis of Algorithms-004计算内存
热门文章
- Yii 自带的分页实例
- TOJ 3660 家庭关系
- 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!
- BNU 20950 ——沉重的货物 —————— &#183; 最短路、最短边最大化」
- WCF的入门教程dome(一)
- Entity FrameWork利用Database.SqlQuery<;T>;执行存储过程并返回参数
- 引用SQLHelper类configurationmanager 不存在
- Observer(观察者)设计模式[转]
- Java进程内缓存
- arcengine自己做一个工具Tool放到工具箱中