Tomcat SSL证书安装配置指南

一、导入根证书和中间证书

现在可以通过命令来导入您服务器证书, 比如:
Tomcat 安装时需把根证书、交叉证书(可能有)、中级证书、用户证书按顺序全部导入到 keystore 中
命令如下:

Keytool -import -trustcacerts -alias [keyEntry_name] -file xxx.crt -keystore [keystore_name]

[keyEntry_name] :别名;
xx.crt : 表示证书文件;
[keystore_name] : 证书容器

1、导入根证书、交叉证书(可能有)、中级证书

keytool -import -trustcacerts -alias root -file root.crt -keystore keystore.jks
keytool -import -trustcacerts -alias cross –file cross.crt -keystore keystore.jks
keytool -import -trustcacerts -alias issuer -file issuer.crt -keystore keystore.jks

2、导入服务器证书

Keytool -import -trustcacerts -alias [keyEntry_name] –file user_domian.crt -keystore [keystore_name]

[keyEntry_name]:别名;您制作 CSR 时候输入的别名;
user_domian.crt : 表示服务器证书名称;
[keystore_name]:证书容器 keystore.jks;

keytool -import -trustcacerts -alias myCert -file user_domian.crt -keystore keystore.jks

在运行此命令时会提示您输入密码,也就是您在生成 alias 时设置的密码。 (注: 当您导入证书的时候如
果“提示错误:无法从回复中建立链接”此时解决的方式是:检查证书的别名是否正确,中级根证书是否已经导
入) 当导入证书到您的 myCert 时,一定要使用生成 CSR 时一样的别名(-alias),同时使用-trustcacerts 参数。如果
不指定一样的别名,将不能安装成功!

3、验证检查证书

最终导入中级根证书和服务器证书文件后,可以通过以下命令检查是否包含了四级证书链接。 命令行:

keytool -list -v –keystore [证书文件]

二、 配置部署 SSL 证书

1、 Tomcat 8.5 之前版本

找到 Tomcat 安装目录 conf 下的“Server.xml”, 用文本编辑器打开,找到如下图示位置

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
/>

默认情况下<Connector port="8443"……>是被注释的,我们可以把“<!-- -->”去掉,然后对其节点进行相应的修改。
配置示例如下:

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    keystoreFile="keystore/keystore.jks" keystorePass="证书密码"
    clientAuth="false" sslProtocol="TLS"
    ciphers="TLS_RSA_WITH_AES_128_GCM_SHA256,
        TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
	TLS_RSA_WITH_AES_128_CBC_SHA,
	TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
	TLS_RSA_WITH_AES_128_CBC_SHA256,
	TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
	SSL_RSA_WITH_3DES_EDE_CBC_SHA,
	TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"
/>

备注: port:端口号;
keystoreFile:证书路径(例如: conf/keystore.jks); keystorePass:证书密码。
最后保存该配置文件,然后重启 Tomcat 后再次访问。如图 13:

2、 Tomcat 8.5 及之后版本

找到 Tomcat 安装目录 conf 下的"Server.xml", 用文本编辑器打开,找到如下图示位置 如图 14:

<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
            type="RSA" />
    </SSLHostConfig>
</Connector>
-->

默认情况下<Connector port="8443"……>是被注释的,我们可以把"<!-- -->"去掉,并进行相应的修改。
配置示例如下:

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/keystore.jks"
            certificateKeyAlias="myCert"
            certificateKeystorePassword="证书密码"
            type="RSA" 
        />
    </SSLHostConfig>
</Connector>


备注: port:端口号;
certificateKeystoreFile:证书路径(例如: conf/name.jks);
certificateKeystorePassword:证书密码;
certificateKeyAlias:证书别名
最后保存该配置文件,然后重启 Tomcat 后再次访问即可。

三、HTTP 自动跳转 HTTPS 的安全配置

找到 conf 目录下的 web.xml 文件, 在该文件的 </welcome-file-list> 下面,添加以下内容:

<login-config>
    <!-- Authorization setting for SSL -->
    <auth-method>CLIENT-CERT</auth-method>
    <realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
    <!-- Authorization setting for SSL -->
    <web-resource-collection>
        <web-resource-name>SSL</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

为了让非 SSL 的 connector 可以跳转到 SSL 的 connector 中,还需要前往 server.xml 进行配置:

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="443" />

redirectPort 改成 SSL 的 connector 的端口443,重启后便会生效。