JKS文件准备

jks文件转换参考:https://www.yuque.com/sheca/kfxgzb/tyb1xg
转换完成之后将jks文件上传至tomcat服务器中。

证书配置

在Tomcat的server.xml文件中,已经提供了现成的配置SSL连接器的代码,只要把元素的注释去掉或重新添加元素即可:
maxThreads=”150” SSLEnabled=”true” scheme=”https” secure=”true”
clientAuth=”false” sslProtocol=”TLS” keystoreFile=”C:/tomcat/server.jks” keystorePass=”123456”/>
配置修改完成之后重启Tomcat,通过浏览器https方式访问验证是否正确。
基于SSL的HTTPS使用的默认端口是443。但Tomcat在这里将HTTPS端口设置为8443。
配置里的一些属性参数如下:

SSLEnabled开启SSL功能

clientAuth验证客户端(值为false单向认证,双向认证值为true)
keystoreFile指定jks文件的存放位置及文件名
keystorePass指定keystore的密码(即jks文件密码)

http自动跳转HTTPS

在tomcat\conf\web.xml中的后面加上这样一段


CLIENT-CERT
Client Cert Users-only Area




SSL
/*


CONFIDENTIAL

关闭过时的加密套件算法

通过配置sslEnabledProtocols和ciphers参数,为Tomcat指定安全的传输层协议和加密算法套件,同时可以避免Chrome和Firefox访问加密网站时提示“服务器的瞬时Diffie-Hellman 公共密钥过弱”错误。

基于Java 1.6,请添加:
……
sslEnabledProtocols=”TLSv1,TLSv1.1,TLSv1.2” ciphers=”TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA” />

基于Java 7,请添加:
……
sslEnabledProtocols=”TLSv1,TLSv1.1,TLSv1.2” ciphers=”TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256” />

基于Java 8,请添加:
……
sslEnabledProtocols=”TLSv1,TLSv1.1,TLSv1.2” ciphers=”TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256” />
如果您还在使用Java 1.6或7.0版本,建议升级到最新的Java 8,以获得最佳安全保护。

Tomcat 6官方文档: https://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html
Tomcat 7官方文档: https://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html
Tomcat 8官方文档: https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html
Tomcat 9官方文档: https://tomcat.apache.org/tomcat-9.0-doc/ssl-howto.html