前文说明

经过了大约两周的备案过程,前天终于得到了备案成功的消息,内心也是十分的激动。但是当我访问的时候,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,安装信息如下图:

grpc_pass 443端口 443端口开启_https

如果没有安装,按照以下两个命令安装

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文件夹,把我们的证书上传到该文件夹即可。新建文件夹样例图如下:

grpc_pass 443端口 443端口开启_grpc_pass 443端口_02

第五步 添加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>