制作JKS文件
JKS(Java Keystore)文件是Tomcat用来管理和使用SSL证书的文件格式,我们首先需要制作完成JKS文件。您在递交订单时,会采用以下两种方式,请按照不同的说明制作JKS文件。
情况一:系统自动生成CSR(证书请求文件)
如果您在递交订单时,选择“系统自动生成CSR(证书请求文件)”:在您递交订单时,会要求您下载并保存server.key文件;在订单完成后,请在“控制台→订单查询→订单详细页”下载“CRT文件”,保存为server.crt。请到 JKS在线合成工具 ,使用server.key和server.crt文件合成一个新的JKS文件。在这里需要设置2个参数:
- 别名:导入到JKS中的密钥对的索引名称(que)。
- 密码:访问JKS的密码,需要在Tomcat配置文件中写入。
情况二:手工上传CSR(证书请求文件)
如果您在递交订单时,选择“我手工上传CSR(证书请求文件)”:您的CSR文件应该是根据tomcat文档,使用KeyTool.exe制作的。在订单完成后,请在“控制台→订单查询→订单详细页”下载“P7B文件”,保存为server.p7b,运行命令,将P7B文件导入原来的jks文件:
keytool -import -keystore server.jks -alias ssl -file server.p7b
Tomcat SSL配置
请将server.jks文件上传到服务器,打开配置文件Server.xml,修改配置如下 (区分字母大小写):
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" clientAuth="false" sslProtocol="TLS" keystoreFile="d:/jks/server.jks" keystorePass="密码" />
关闭过时的加密套件算法
通过配置sslEnabledProtocols和ciphers参数,为Tomcat指定安全的传输层协议和加密算法套件,同时可以避免Chrome和Firefox访问加密网站时提示“服务器的瞬时Diffie-Hellman 公共密钥过弱”错误。
基于Java 1.6,请添加:
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" …… 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,SSL_RSA_WITH_3DES_EDE_CBC_SHA" />
基于Java 7,请添加:
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" …… 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,请添加:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" …… 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
最新修订日期:2018年01月26日