HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer)是以安全为目标的 HTTP 通道。在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在 HTTP 的基础下加入 SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP 与 TCP 之间)。
本文将介绍怎样在 Tomcat 下面配置开启 HTTPS 协议,提高安全性。
JDK版本:javac 1.8.0_45
Tomcat版本:apache-tomcat-7.0.64
下面将介绍怎样使用 keytool 工具生成证书。如下:
(1)JDK6及以下
C:UsersAdministratorDesktopcert> keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat.keystore 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: hxstrive 您的组织单位名称是什么? [Unknown]: hxstrive 您的组织名称是什么? [Unknown]: hxstrive 您所在的城市或区域名称是什么? [Unknown]: CD 您所在的省/市/自治区名称是什么? [Unknown]: SC 该单位的双字母国家/地区代码是什么? [Unknown]: CN CN=hxstrive, OU=hxstrive, O=hxstrive, L=CD, ST=SC, C=CN是否正确? [否]: Y 输入 <tomcat> 的密钥口令 (如果和密钥库口令相同, 按回车):
(2)JDK1.7以上
C:UsersAdministratorDesktopcert> keytool -genkeypair -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat.keystore 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: hxstrive 您的组织单位名称是什么? [Unknown]: hxstrive 您的组织名称是什么? [Unknown]: hxstrive 您所在的城市或区域名称是什么? [Unknown]: CD 您所在的省/市/自治区名称是什么? [Unknown]: SC 该单位的双字母国家/地区代码是什么? [Unknown]: CN CN=hxstrive, OU=hxstrive, O=hxstrive, L=CD, ST=SC, C=CN是否正确? [否]: Y 输入 <tomcat> 的密钥口令 (如果和密钥库口令相同, 按回车):
打开 conf/server.xml 配置文件,添加如下配置:
<?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <!-- ... --> <Service name="Catalina"> <!--The connectors can use a shared executor, you can define one or more named thread pools--> <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="D:/apache-tomcat-7.0.64-2/conf/cert/tomcat.keystore" keystorePass="123456" /> <!-- ... --> </Service> </Server>
注意,使用 keystoreFile 指定密钥库文件,采用绝对路径。keystorePass 表示密钥库的密码。
配置好 Tomcat 后,重启 Tomcat。使用浏览器访问 https://localhost:8443 验证,如果你能看见如下页面,则说明 HTTPS 开启成功。