tomcat 配置 https 的双向认证

4 条评论

双向认证的过程和使用 nginx 还是 tomcat 没有关系,不过是不同的应用配置不同而已,因此对于密钥、证书的准备可以直接按照 nginx 配置 https 的双向认证 里的介绍,但也有几个步骤需要做一些特别的处理,这里就只关注不一样的地方了。

签名CA证书请求

在 JAVA7 的证书认证实现里,对查找 CA 做了更加严格的限制,要求 CA 证书指定明确的 KeyUsage,否则不会找到对应的 CA 去对证书进行校验,这样在自签名CA证书请求时就需要指定好 KeyUsage 了。

1) 修改 extention file

cp /etc/ssl/openssl.cnf .

然后修改 v3_ca 这个 section,取消掉 KeyUsage 那行配置的注释

key usage configuration

KeyUsage 配置

2) 签名CA证书请求

openssl x509 -req -in ca-req.csr -extfile openssl.cnf -extensions v3_ca -out ca-cert.pem -signkey ca-key.pem -days 3650

准备网站密钥及证书

JDK 里自己提供了一个 keytool 的工具用来对密钥以及证书进行管理,所以这里多一个选择,直接使用 keytool 的话

1) 生成密钥对

keytool -genkeypair -alias su.su -keyalg RSA -keysize 2048 -validity 3650 -keystore keystore -storepass changeit

2) 生成网站证书请求

keytool -certreq -alias su.su -file su-req.csr -keystore keystore

3) CA签名网站证书请求

这一步按照 nginx 配置 https 的双向认证 里介绍的步骤做,使用 openssl 工具来签名,可以获得 su-cert.pem

配置 tomcat

1、导入 CA 证书到 keystore

因为想将网站已经签名的证书导入到 keystore 的前提是这个证书是可以被信任的,所以首先将 CA 证书给导入进来

keytool -importcert -trustcacerts -alias ca -file ca-cert.pem -keystore keystore

注意导入 CA 证书时,添加 –trustcacerts 的参数,另外单独的证书是不需要 keypass 的。

2、导入网站证书到 keystore

前面提到准备网站的密钥及证书可以使用 keytool 也可以直接使用 openssl 命令来生成,如果使用的 keytool 工具,那么现在只需要

keytool -importcert -alias su.su -keystore keystore -storepass chagneit -file su-cert.pem

如果使用的 openssl 命令,现在有 su-key.pem 和 su-cert.pem 要导入 keystore 就会麻烦一点(但是推荐)

首先将密钥和证书转换成 pkcs #12 格式

openssl pkcs12 -export -clcerts -in su-cert.pem -inkey su-key.pem -out su.p12

这里需要指定 export password,可以在这里就指定成和要导入的 keystore 的 storepass 一致,免去后面的转换。然后将 pkcs #12 的证书再导入到 keystore

keytool -importkeystore -srckeystore su.p12 -destkeystore keystore -srcstoretype pkcs12

导入进去之后,可能想改下 alias,并且修改 keypass 和 storepass 一致

keytool -changealias -srcalias 1 -destalias su.su -keystore keystore
keytool -keypasswd -alias su.su -keystore keystore

3、导入 CA 证书到 truststore

跟导入到 keystore 的命令参数是一样的,甚至要是想将 keystore 当作 truststore 用也没有关系

keytool -importcert -trustcacerts -alias ca -file ca-cert.pem -keystore truststore

4、配置 server.xml

主要就是打开 clientAuth ,并且因为这里只能配置 keystore 的密码,所以前面注意一定让 keyPass 和 storePass 保持一致

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true" enableLookups="true"
           clientAuth="true" sslProtocol="TLS"
           keystoreFile="conf/keystore" keystorePass="changeit"
           keystoreType="JKS"
           truststoreFile="conf/truststore" truststorePass="changeit"
           truststoreType="JKS" />

然后就可以启动 tomat 了,打开网站时,浏览器也会提示选择客户端证书

key usage configuration

IE 打开双向认证的 tomcat

Tips: 如果使用IE打开站点,SSL握手不通过,那就到 Internet 选项的高级设置里取消对“使用SSLv2”的选择

参考:

相关日志 Relate Posts

收藏与分享 : Twitter | Facebook | 微博 | 人人 | Google+ | PDF

“tomcat 配置 https 的双向认证”4条留言

  1. 沙发啦 😮

    • @阿邙 沙发你好- -!

  2. 还在坚持写啊。。

    • @nic 从垃圾评论堆里翻出来你- -!

发表留言(Ctrl+Enter提交)