java生成数字证书_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 //秘钥格式大小

-sigalgSHA256withRSA//签名算法名称

-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

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、生成的文件

eb99c9b56314ae5555ec7c18b36dd98f.png

10、客户端安装证书

#、客户端需要安装的两个文件。

30e6a65d015dc7d843e3c43e497fcda1.png

#、运行“certmgr.msc”命令,进入证书控制台,分别这两个目录下安装证书

7e099e3603a9cdd78a282d7bd4c7ae8b.png

# 、“个人”->“证书”右键导入,进入向导

b558722d316e402e5d02416ffee36329.png

#、选择 .p12文件,下一步

c68b1c586443508732cd00b6a8653110.png

#、输入密码按下一步,密码是生成p12文件时配置密码 “-storepass xxxxxx"

a10fb998e3244eaefe8152cc485f0ad7.png

#、然后以下的步骤就一直点到完成,导入后控制台会有安装的文件

b2991ad1235d78a51d71d75a29477e7b.png

11、安装服务端证书

#、安装

f125251614290be29a2f01935e0d7a58.png

#、选择服务器证书

be59ed2718d0301d17d99ae76aa55e08.png

#、直接点击下一步

d63c3a78b873e2b4471abcc3e7dd823d.png

#、会出现警告信息,点击“是”即可

ccb6e1391c1dfd6aafcdc5351b6cfcdc.png

#、已包含安装的服务器证书。

8f8eaaaff4f0defa27647bb26043970e.png

12、访问服务器,需要使用https 访问,显示域名安全锁

2c94a0a1bf9845bb40578beff32e7f55.png

问题与解决方案:

问题1:每次在秘钥库中导入客户端的证书后,都要重启tomcat服务才能加载到新添加的证书。如何能将tomcat每次都能自动加载秘钥库,保证每次导入的新证书被加载到。

问题2:nginx+tomcat 配置证书双向认证

解决方案:博友们对问题1有更好的建议或方案,欢迎留言共同探讨。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值