今天为大家讲解在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
3https://localhost:8443/
http://localhost:8080/
如图所示:
1.4 常见错误
以下是笔者在使用中,一些常见的错误,记录在此:
问题一:
问题描述:1
java.lang.Illega1ArgumentException: java.security.UnrecoverableKeyException: Cannot recover key
如图:
出现原因: 生成.keystore文件时的密匙库口令与tomcat的密匙库口令不一致。
解决办法: 保持tomcat的密匙库口令与.keystore的密匙库口令一直。
解决办法如图:
问题二
问题描述:1
keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect
如图:
出现原因: 密匙口令不正确
解决办法:
① 删除已存在的.keystore,重新生成一遍,并修改tomcat,server.xml配置下keystorePass为新的密匙口令。