前文说明
经过了大约两周的备案过程,前天终于得到了备案成功的消息,内心也是十分的激动。但是当我访问的时候,Google浏览器提示不安全,这是因为没有采用HTTPS导致的,因此开启了长达一天的痛苦摸索。
实验环境
我用的是 Linux 的 Ubantu 系统,服务器为 Tomcat9,域名是从阿里云提供的。
第一步 开启端口
首先确认您的Tomcat服务器上已经开启了443端口(HTTPS服务的默认端口),因为默认情况下,非root用户不能用1024以下的端口。
Ubantu的打开防火墙命令 sudo ufw enable
关闭防火墙 sudo ufw disable
查看状态 disable/status
对于某一个端口允许访问某一个端口:
ufw allow 端口号
拒绝访问某一个端口:
ufw deny 端口号
比如我们要打开443端口的命令为ufw allow 443
。如果提示没有权限,前面加上sudo即可。
第二步 安装OpenSSL工具
查看是否安装OpenSSL工具命令为openssl version -a
,安装信息如下图:
如果没有安装,按照以下两个命令安装
sudo apt-get install openssl
sudo apt-get install libssl-dev
安装好后查看状态即可。
第三步 获取SSL证书
我们去阿里云的控制台下载SSL证书即可,至于怎么获取就不讲了,网上太多了。
Tomcat支持PFX和JKS两种验证方式,阿里云提供的是PFX格式的,我们也可以按照以下命令转换为JKS格式。
keytool -importkeystore -srckeystore PFX格式的文件名.pfx -destkeystore JKS格式的文件名.jks -srcstoretype PKCS12 -deststoretype JKS
第四步 上传证书到服务器
我们用WinSCP工具连接上服务器后,在Tomcat安装目录下新建一个cert文件夹,把我们的证书上传到该文件夹即可。新建文件夹样例图如下:
第五步 添加HTTPS信息
在Tomcat安装目录/conf下修改server.xml,在里面添加如下信息。
<Connector port="443" #port属性根据实际情况修改(https默认端口为443)。如果使用其他端口号,则您需要使用https://yourdomain:port的方式来访问您的网站。
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="Tomcat安装目录/cert/domain name.pfx" #证书名称前需加上证书的绝对路径,请使用您证书的文件名替换domain name。
keystoreType="PKCS12"
keystorePass="证书密码" #请替换为密码文件pfx-password.txt中的内容。
clientAuth="false"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>
第六步 查看效果
在Tomcat的bin目录下输入以下命令./shutdown.sh
关闭Tomcat,使用命令./start.sh
启动服务器。
在浏览器输入https://你的域名
即可访问。
The end
当然,如果我们想强制使用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>