Tomcat 中使用HTTPS

今天为大家讲解在Tomcat中使用HTTPS的方法,关于更多Tomcat,你也可以查看Tomcat的详解

Tomcat 使用HTTPS

1.1 环境准备

以下讲解基于:
jdk版本: jdk1.8.0_112
tomcat版本: apache-tomcat-8.5.6

1.2 生成keystore

在这里,我们使用到了jdk中自带的keytool,生成keystore,
Window下方法:

1
"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA

Linux:

1
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA

执行后:如图所示:
操作方式
以上参数根据自己的实际参数进行替换,我这里的密匙口令为: andyqian
没有出错,则表示生成成功,生成成功后,我们可以通过以下路径找到生成的.keystore文件:
Window下:

1
C:\Users\用户名\.keystore

1.3 Tomcat配置

在生成keystore文件后,这时候我们需要在tomcat下进行配置,首先,我们打开$TOMCAT_HOME$\conf\server.xml,找到如下节点:

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

(也可搜索直接搜索Http11NioProtocol,定位到该节点),该节点默认是注释掉的,我们将以下内容,替换掉,并去掉注释:

1
2
3
4
5
6
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="${user.home}/.keystore" keystorePass="andyqian"
clientAuth="false" sslProtocol="TLS"/>

其中:
protocol: 表示协议实现。
port: 访问端口(可修改,默认为:8443)。
maxThreads: 最大线程数。
scheme: https。
secure: 连接是否安全。
SSLEnabled: 是否启用ssl。
keystoreFile: 表示1.1中生成keystore的路径。
keystorePass: 表示.keystore文件的密匙。(此处的andyqian为之前生成.keystore的密匙口令)
sslProtocol: ssl协议。
修改完成后,我们可以使用https进行访问:

1
2
3
https://localhost:8443/  

http://localhost:8080/

如图所示:
http访问

1.4 常见错误

以下是笔者在使用中,一些常见的错误,记录在此:
问题一:
问题描述:

1
java.lang.Illega1ArgumentException: java.security.UnrecoverableKeyException: Cannot recover key

如图:
http访问
出现原因: 生成.keystore文件时的密匙库口令与tomcat的密匙库口令不一致。
解决办法: 保持tomcat的密匙库口令与.keystore的密匙库口令一直。
解决办法如图:
解决办法
问题二
问题描述:

1
keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect

如图:
问题二
出现原因: 密匙口令不正确
解决办法:
① 删除已存在的.keystore,重新生成一遍,并修改tomcat,server.xml配置下keystorePass为新的密匙口令。

1.5 参考资料

Tomcat官方文档