使用Java的keytool制作数字证书

一、概述

keytool是Java平台下的密钥和证书管理工具
如下图:
在这里插入图片描述
接下来,将一步步制作CA证书,以及CA签名后的服务器证书。

二、制作证书

2.1生成根证书(CA证书)

keytool -genkeypair -alias rootpair -keystore my.keystore -keyalg RSA

在这里插入图片描述
密码选择 123456

这条命令做了几件事情:

1.根据RSA非对称加密算法,生成密钥对,即公钥和私钥
2.使用私钥,将公钥以及其余信息(CA=ca...)签名为数字证书
3.将密钥对,以及证书信息,保存到my.keystore证书库文件中

名词解释:

jks是指xx.keystore文件保存密钥对、以及数字证书的格式,这是Java专用的格式,命名为jks(java keystore)。

结果如图:
在这里插入图片描述

2.2 导出CA证书

#导出CA证书到root.cer文件
keytool -exportcert -alias rootpair -keystore my.keystore -file root.cer
#打印root.cer证书的内容
keytool printcert -file root.cer

在这里插入图片描述
此CA证书将被安装到浏览器端,用来确保来自服务端证书的可靠性。

注意该证书所有者和发布者相同,故称自签名证书。

2.3 制作服务端证书

现在,我们需要制作服务器端证书。

2.3.1 生成新密钥对serverpair

和2.1的步骤一样,先生成一个新的密钥对:

keytool -genkeypair -alias serverpair -keystore my.keystore -keyalg RSA

该服务端证书,后面会安装到本机的tomcat上,故此处“您的名字与姓氏”填写localhost,否则浏览器访问tomcat,发现证书上的域名和实际访问域名不一致,将发出警告。
在这里插入图片描述

扫描二维码关注公众号,回复: 5640631 查看本文章

2.3.2 生成证书请求

#生成证书请求文件server.req
keytool -certreq -alias serverpair -keystore my.keystore -file server.req

在这里插入图片描述
在这里插入图片描述

2.3.3 生成认证后的server证书

#使用rootpair对请求server.req进行认证,生成认证后的证书server.cer
keytool -gencert -infile server.req -outfile server.cer -alias rootpair -keystore my.keystore

注意证书server.cer的所有者和发布者是不一样的,说明认证成功。
在这里插入图片描述
在这里插入图片描述

2.3.4 导入已认证的server.cer到keystore

实际上,my.keystore中已保存了serverpair的数字证书,但是自签名的证书。导入server.cer,将覆盖keystore中原有的证书。

keytool -importcert -alias serverpair -keystore my.keystore -file server.cer

在这里插入图片描述
查看keystore中已有的证书:

G:\keystore>keytool -list -v -keystore my.keystore
输入密钥库口令:
密钥库类型: jks
密钥库提供方: SUN
您的密钥库包含 2 个条目
别名: serverpair
创建日期: 2019-2-28
条目类型: PrivateKeyEntry
证书链长度: 2
证书[1]:
所有者: CN=localhost, OU=localhost, O=localhost, L=localhost, ST=localhost, C=localhost
发布者: CN=ca, OU=ca, O=ca, L=ca, ST=ca, C=ca
序列号: 515ae12b
有效期为 Thu Feb 28 23:01:24 CST 2019 至 Wed May 29 23:01:24 CST 2019
证书指纹:
         MD5:  64:CA:A9:0E:E7:89:E3:41:C0:BF:6F:11:F3:0B:27:72
         SHA1: 91:3F:FB:90:FB:0A:3D:DB:5F:0E:85:2F:08:3E:6C:B7:B4:BF:2C:A6
         SHA256: 57:AB:71:E9:4A:CA:D7:3C:39:C4:AE:0C:80:79:F5:6C:E8:12:4D:A0:CF:25:87:CC:0C:81:FD:CA:0F:A6:A0:E7
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
扩展:
#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: DC 08 F1 A0 87 2B A2 7E   5E 74 86 25 74 2A 8B AA  .....+..^t.%t*..
0010: 68 49 D4 71                                        hI.q
]
]
#2: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 81 04 5D DF A0 1E 8A 76   45 B6 FA 5D 50 1C 87 02  ..]....vE..]P...
0010: 4B 9A 31 B3                                        K.1.
]
]
证书[2]:
所有者: CN=ca, OU=ca, O=ca, L=ca, ST=ca, C=ca
发布者: CN=ca, OU=ca, O=ca, L=ca, ST=ca, C=ca
序列号: 28ac04fb
有效期为 Thu Feb 28 22:04:14 CST 2019 至 Wed May 29 22:04:14 CST 2019
证书指纹:
         MD5:  01:BE:EE:7F:57:BE:6F:AA:DC:6C:07:83:0B:8A:83:BB
         SHA1: F5:DB:E0:A6:98:D5:70:39:5F:03:CA:C1:A1:A1:56:AF:98:61:72:18
         SHA256: 12:4B:4B:D8:D0:24:D0:69:CB:46:D5:FC:B8:39:37:B0:F2:86:7B:8E:05:5B:24:97:CC:E4:18:7D:0B:8E:A6:44
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: DC 08 F1 A0 87 2B A2 7E   5E 74 86 25 74 2A 8B AA  .....+..^t.%t*..
0010: 68 49 D4 71                                        hI.q
]
]
*******************************************
*******************************************
别名: rootpair
创建日期: 2019-2-28
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=ca, OU=ca, O=ca, L=ca, ST=ca, C=ca
发布者: CN=ca, OU=ca, O=ca, L=ca, ST=ca, C=ca
序列号: 28ac04fb
有效期为 Thu Feb 28 22:04:14 CST 2019 至 Wed May 29 22:04:14 CST 2019
证书指纹:
         MD5:  01:BE:EE:7F:57:BE:6F:AA:DC:6C:07:83:0B:8A:83:BB
         SHA1: F5:DB:E0:A6:98:D5:70:39:5F:03:CA:C1:A1:A1:56:AF:98:61:72:18
         SHA256: 12:4B:4B:D8:D0:24:D0:69:CB:46:D5:FC:B8:39:37:B0:F2:86:7B:8E:05:5B:24:97:CC:E4:18:7D:0B:8E:A6:44
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: DC 08 F1 A0 87 2B A2 7E   5E 74 86 25 74 2A 8B AA  .....+..^t.%t*..
0010: 68 49 D4 71                                        hI.q
]
]
*******************************************
********************************************

可以看到 serverpair的证书链长度为2。

tomcat9安装服务端证书

现在,需要将serverpair这个keypair导出到一个单独的keystore,供tomcat使用。因为my.keystore包含了根证书的密钥对,不能提供给server端。

keytool -importkeystore -srckeystore my.keystore -destkeystore server.keystore -srcalias serverpair -destalias serverpair

在这里插入图片描述
接着,打开TOMCAT_HOME/conf/server.xml配置文件,配置SSL(ctrl + f 搜索ssl):

<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="G:/keystore/server.keystore" keystorePass="123456" keyAlias="serverpair" 
           clientAuth="false" sslProtocol="TLS"/>

启动tomcat,没有异常说明启动成功!
接着,打开IE浏览器,安装根证书root.cer到受信任机构证书中,步骤是:
1.设置 -> 选项
在这里插入图片描述
2.找到内容选项卡,设置证书
在这里插入图片描述
3.受信任证书选项卡,导入证书
在这里插入图片描述
4.一直点击下一步,选择root.cer进行安装,安装完成后,查看受信任证书是否添加完成:
在这里插入图片描述
现在,ie访问 https://localhost:8443,没有出现警告说明https配置成功:
在这里插入图片描述
可查看网站证书:
确实是我们生成的localhost证书,他被ca认证过。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_21508059/article/details/88047084