JAVA JDK keytool 生成数字证书
简介:
数字证书作为网络安全数据传输的凭证,web在传输时客户端(浏览器)和 服务端(服务器)先进行会话握手,在握手过程中服务端会验证客户端的是否已经在服务端做了认证,这是单向认证。如果是双向认证的话,客户端云会校验请求的服务器是否是已认证的安全。当所有的验证通过后,客户端和服务端才会建立安全的连接。这个时候才能保证数据的传输是安全的。
设计方案:
- 服务器维护一个秘钥库server.jks 并重秘钥库中导出证书 server.cer。
- 客户端证书,由管理员创建 client.p12 和导出证书 client.cer,可以创建多个客户端证书。
- 导出的证书client.cer需要导入到server.jks秘钥库中认证。
- 人后下发给客户端的安装文件包含 client.p12 和 server.cer。
技术实现:
环境:JDK 1.8.0,IE浏览器 v.11.0,谷歌浏览器v.74.0
工具:keytool
示例
- 1、创建服务器秘钥库
keytool
-genkey //创建指令
-v //详细输出
-alias server_key //唯一别名
-keyalg RSA //加密类型
-keysize 4096 //秘钥格式大小
-sigalg SHA256withRSA //签名算法名称
-keystore server.jks //秘钥名称
-validity 36500 //有效期
-dname "CN=*.runcui.net,OU=runcui Inc,O=IT,L=ShenZhen,ST=GuangDong,C=CN" //参数设置,CN=“服务器域名”
-ext "SAN=DNS:localhost,IP:172.20.10.4" //X.509 扩展,设置主题备注名
-ext "BC=ca:true" //
-storepass server1234 //秘钥库密码
-keypass server1234 //秘钥密码
- 2、导出服务证书
keytool
-exportcert
-v
-rfc
-alias server_key
-keystore server.jks
-file server.cer
-storepass server1234
-keypass server1234
- 3、创建客户端秘钥(文件类型 .P12)
keytool
-genkey
-v
-alias client
-keyalg RSA
-keysize 4096
-sigalg SHA256
-storetype PKCS12
-keystore client.p12
-validity 30
-dname "CN=*.runcui.net,OU=runcui Inc,O=client,L=ShenZhen,ST=GuangDong,C=CN"
-storepass client1234
-keypass client1234
- 4、导出客户端证书
keytool
-exportcert
-v
-rfc
-alias client
-keystore client.p12
-file client.cer
-storepass client1234
-keypass client1234
- 5、服务器的秘钥库中导入客户端的证书,作为客户端访问服务器的可信校验凭证。
keytool
-import
-v
-alias clientkey
-file client.cer
-keystore server.jks
-storepass server1234
-keypass server1234
- 6 、查看秘钥库的中的证书
keytool -v -list -keystore server.jks -storepass server1234 -keypass server1234
- 7 、删除秘钥库中的客户端证书
keytool --delete -alias clientkey -keystore server.jsk
- 8、tomcat 配置server.xml
<Connector port="8080" protocol="HTTP/1.1"
SSLEnabled="true" maxThreads="150" scheme="https"
secure="true" clientAuth="true" sslProtocol="TLS"
keystoreFile="D:\\keytool\\example01\\server.jks" keystorePass="server1234" truststoreFile="D:\\keytool\\example01\\server.jks"
truststorePass="server1234"/>
属性:
clientAuth : 设置双向认证 true、默认为单向认证 false
sslProtocol:
keystoreFile:秘钥库路径
keystorePass:秘钥库口令
truststoreFile:秘钥库根目录
truststorePass:口令
示例代码:
- 9、生成的文件
- 10、客户端安装证书
#、客户端需要安装的两个文件。
#、运行“certmgr.msc”命令,进入证书控制台,分别这两个目录下安装证书
# 、“个人”->“证书”右键导入,进入向导
#、选择 .p12文件,下一步
#、输入密码按下一步,密码是生成p12文件时配置密码 “-storepass xxxxxx"
#、然后以下的步骤就一直点到完成,导入后控制台会有安装的文件
- 11、安装服务端证书
#、安装
#、选择服务器证书
#、直接点击下一步
#、会出现警告信息,点击“是”即可
#、已包含安装的服务器证书。
- 12、访问服务器,需要使用https 访问,显示域名安全锁
问题与解决方案:
问题1:每次在秘钥库中导入客户端的证书后,都要重启tomcat服务才能加载到新添加的证书。如何能将tomcat每次都能自动加载秘钥库,保证每次导入的新证书被加载到。
问题2:nginx+tomcat 配置证书双向认证
解决方案:博友们对问题1有更好的建议或方案,欢迎留言共同探讨。
最新文章
- fir.im Weekly - 给女朋友的 iOS 开发教程
- 微课程--Android--Android概述
- [ZOJ 1002] Fire Net (简单地图搜索)
- JS源码(条件的判定,循环,数组,函数,对象)整理摘录
- 教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
- 设计模式之十三:适配器模式(Adapter)
- Lucene的Query类介绍
- Android中使用findViewByMe提升组件查找效率
- Java爬虫框架WebMagic——入门(爬取列表类网站文章)
- flex-手机端主页布局实例---构造页面结构
- JAVA 学习日记
- laravel之ORM增删改查数据
- python 二叉树实现
- 宝塔面板配置阿里云SSL证书流程
- Apollo 2 如何支持 @Value 注解自动更新
- org.apache.http.TruncatedChunkException: Truncated chunk ( expected size: 47956; actual size: 35656)
- Tether USDT 节点钱包的安装与使用
- <;a>;, <;input>;, <;button>;的区分与何时使用
- lsblk命令详解
- Eclipse中配置Solr源码