tomcat配置https二级证书

前言

最近研究了下https的安全原理,流程相对简单,先非对称加密协商秘钥,再对称加密传输数据。
下面实践了下tomcat配置https二级证书,记录下自己的理解吧。

配置过程

# 生成ca秘钥库ca.keystore
keytool -genkeypair -alias ca -keyalg RSA -keystore ca.keystore

# 生成的秘钥库里面会有一个私钥条目(PrivateKeyEntry),这个条目里面存放的ca的私钥和公钥,公钥的签名就是用的改私钥(自签名)
[root@emr-compile keydir]# keytool -list -keystore ca.keystore
Enter keystore password:  
Keystore type: jks
Keystore provider: SUN

Your keystore contains 1 entry

ca, Jun 23, 2021, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): BF:57:65:07:89:1F:79:88:AF:8F:BE:F6:2D:AA:88:12:25:D7:73:2D:29:40:10:B0:E7:62:B9:29:FB:A5:B8:8D

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore ca.keystore -destkeystore ca.keystore -deststoretype pkcs12".

# 再生成tomcat用的秘钥库tomcat.keystore
#生成tocmat.keystore里面有alias=tocmat的公私钥对
#如果tomcat现在直接就用这个tomcat.keystore,会直接取alias=tomcat(因为只有这一个条目)的条目的公私钥对,传给浏览器的公钥就是这个条目里面的公钥,公钥签名是自己的私钥做的,自签名,也就是根证书
keytool -genkeypair -alias tomcat -keyalg RSA -keystore tomcat.keystore

# 现在要搞二级证书,就得把tomcat的这个条目的公钥的签名,换成ca的私钥做的签名
# 先把tomcat的证书(alias=tomcat)生成证书签名请求
keytool -certreq -alias tomcat -keystore tomcat.keystore -file tomcat.csr

# ca签名tomcat证书请求csr并生成签名证书tomcat.cer
keytool -gencert -alias ca -keystore ca.keystore -infile tomcat.csr -outfile tomcat.cer

# 将tomcat.cer导入到tomcat.keystore, tomcat.cer里面的证书签名会替换tomcat.keystore tomcat条目里面的公钥签名
keytool -importcert -alias tomcat -keystore tomcat.keystore -file tomcat.cer
报错了:keytool error: java.lang.Exception: Failed to establish chain from reply

# 需要先导入ca的证书,将ca的证书导入到tomcat.keystore
keytool -exportcert -alias ca -keystore ca.keystore -file ca.cer
keytool -importcert -alias ca -keystore tomcat.keystore -file ca.cer

# 再重新导入tomcat.cer
keytool -importcert -alias tomcat -keystore tomcat.keystore -file tomcat.cer

# 查看tocmat.keystore,里面有两个条目,一个是ca,trustedCertEntry(信任的证书条目),一个是tomcat,PrivateKeyEntry(私钥条目),tomcat里面的公钥签名已经换成了ca(-v可以查看),变成证书链了。
[root@emr-compile keydir]# keytool -list -keystore tomcat.keystore
Enter keystore password:  
Keystore type: jks
Keystore provider: SUN

Your keystore contains 2 entries

ca, Jun 23, 2021, trustedCertEntry, 
Certificate fingerprint (SHA-256): BF:57:65:07:89:1F:79:88:AF:8F:BE:F6:2D:AA:88:12:25:D7:73:2D:29:40:10:B0:E7:62:B9:29:FB:A5:B8:8D
tomcat, Jun 23, 2021, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): 93:F7:75:7A:E3:1C:BB:8E:57:F2:E3:D0:6D:E2:7A:D1:3B:2A:66:00:F7:95:34:A4:5C:09:68:48:D7:60:7F:63

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore tomcat.keystore -destkeystore tomcat.keystore -deststoretype pkcs12".

tomcat配置

vi server.xml、
将https的connector解注释
配置上

  • certificateKeystoreFile : keystore文件位置
  • certificateKeystorePassword :keystore密码
  • certificateKeyAlias :keystore里面的私钥alias,不填默认取第一个
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="tomcat.keystore" certificateKeystorePassword="xxx" certificateKeyAlias ="tomcat"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

重启tomcat后浏览器验证


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容