使用jdk自带keytool自签SSL证书

一.SSL基础理论知识

1.什么是SSL?

SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。(来自百度百科)

2.SSL原理

通过上面两张图总结基本原理(图片转载来自:https://blog.csdn.net/weixin_43207056/article/details/103846900)

①首先通过SSL证书基于非对称加密确定秘钥(非对称加密理解:有公钥和私钥之分,公钥加密的数据只能私钥能解开,私钥加密的数据只能公钥能解开)

②然后再通过得到的秘钥进行对称加密传输数据(对称加密理解:只有一个秘钥,加密和解密都使用这一个秘钥)

二.证书制作

通过上面的SSL基础理论知识可以知道基于SSL通讯中起至关重要的就是证书,其一为放在服务器的证书,其二为面向客户端的证书,放在服务器的证书应当包含公钥的私钥,而面向客户端的证书只应包含公钥。
注:SSL分单向验证和双向验证

  • 单向验证指只需服务器持有包含公钥和私钥的证书,当客户端和服务器通讯时,服务端把包只含公钥的证书信息发给客户端,由客户端验证其证书真实性,验证通过后便可以进行数据传输(几乎所有https网站为单向验证)。
  • 双向验证指客户端和服务端均持有包含公钥和私钥的证书,当客户端和服务器通讯时,客户端会把自己只包含公钥的证书信息发送给服务端,服务端验证其真实性后,服务端再把自己包只含公钥的证书发给客户端,由客户端验证其证书真实性,双方均验证通过后便可以进行数据传输。

1.制作包含公钥和私钥的证书

keytool -genkeypair -alias server-ks -keyalg RSA -keypass 123456 -keystore E:\自制证书\server-ks.jks -validity 3650 -storepass 123456

  • genkeypair-生成证书命令
  • alias-证书别名
  • keyalg-证书算法
  • keypass-证书密码
  • keystore-证书文件路径
  • validity-证书有效期(单位:天)
  • storepass-保持和keypass一致

2.转换证书格式(非必须)

第一步生成的证书格式为JKS,jks是JAVA的keytools证书工具支持的证书私钥格式,可将其转换为行业标准格式PKCS12
keytool -importkeystore -srckeystore E:\自制证书\server-ks.jks -destkeystore E:\自制证书\server-ks.jks -deststoretype pkcs12

  • importkeystore-导入证书命令
  • srckeystore-原证书路径
  • destkeystore-新生成的证书路径
  • deststoretype-新证书格式

3.根据server-ks.jks导出只包括公钥信息的cer文件(cer文件只包含公钥信息)

keytool -export -alias server-ks -keystore E:\自制证书\server-ks.jks -storepass 123456 -file E:\自制证书\server-ks.cer

  • export-导出命令
  • alias-需要导出证书的
  • storepass-需要导出证书的密码
  • file-导出证书的路径

4.导入只包含公钥的cer证书

keytool -import -alias server-public-ks -file E:\自制证书\server-ks.cer -keystore E:\自制证书\server-public-ks.jks -storepass 123456

  • import-证书导入命令
  • alias-导入后的别名
  • file-需要导入的cer证书路径
  • keystore-生成公钥证书路径
  • storepass-证书库密码

这样就得到了两个证书文件

  • server-ks.jks(包含公钥和私钥的服务器证书)
  • server-public-ks.jks(只包含公钥信息的客户端证书)

注意:如果想要双向验证,重复证书制作,修改别名和密码,再生成一对证书即可

posted @ 2020-07-24 16:25  Small丶  阅读(788)  评论(0编辑  收藏  举报