Tomcat 默认使用的是 http协议,可通过配置使其转换为https协议。
1、简单了解 HTTP 和 HTTPS
HTTP 是超文本传输网络协议,是一个客户端和服务器端请求和应答的标准。HTTP协议是以明文方式发送内容,不提供任何方式的数据加密。所以存在不安全性。为了保证安全性,在HTTP上加了SSL(安全套接层)形成了HTTPS协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。
详细可以看HTTP与HTTPS的区别 。本文这不是重点。
2、简单了解Tomcat server.xml 配置文件
<Server> : 根目录,只有一个,可包含一个或多个 “Service”实例。提供指定的端口上监听shutdown命令。
<Service>: 是一个或多个 "Connectors"的集合,共享一个"Container"。一个service可包含多个connector ,但只有一个Engine。
<Connector>:接收客户端连接请求,创建Request和Response对象用于和请求端交换数据。
<Engine>:接收Connector传过来的请求并处理请求。
详细可看 详解Tomcat 配置文件server.xml 和 https://www.cnblogs.com/starhu/p/5599773.html
我们主要是 修改 <Connector> 中的参数,来使用https协议。
3、tomcat 配置 HTTPS
3.1 JDK自带的keytool工具来生成证书
在jdk安装的目录下bin目录执行命令
keytool -genkey -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -validity 36500
3.2 下面以tomcat7/8/9为例 修改配置文件
3.2.1 tomcat7 (7.0.92)
将下图红色部分 注释去掉,在加上 keystoreFile 与 keystorePass
该为如下:
<Connector port="8081" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="d:\tomcat.keystore"
keystorePass="123456"/>
分别访问http://localhost:8080/ 和 https://localhost:8081/
3.2.2 Tomcat8(8.5.37)
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
<!-- 复制上面注释修改如下,开启 8081端口 https -->
<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="d:\tomcat.keystore" certificateKeystorePassword="123456"
type="RSA" />
</SSLHostConfig>
</Connector>
3.2.3 Tomcat9(9.0.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>
-->
<!-- 开启8081端口 https访问 -->
<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="d:\tomcat.keystore" certificateKeystorePassword="123456"
type="RSA" />
</SSLHostConfig>
</Connector>