因为准备做小程序,所以需要给以前的网站开启https访问。以前的访问方式是http方式的,而且是带端口号的,比如:http://abc.cn:8080/ns 这其中abc.cn就是申请的网站,8080是tomcat端口,ns就是项目根路径
而为了做小程序,就需要把网址改为https://abc.cn/ns这种网址。
本文章列出步骤以及我遇到的各种坑。。。。
1.首先给出我的环境:阿里云ECS服务器centOs6.8系统,这个里面安装了JDK1.8,Tomcat 9.0.11
2.要开启https访问必须要有SSL证书,这里我是在阿里申请的免费证书,如何申请以及申请步骤我这里就不详写了,自己到官网实践
3.证书申请完毕后,就要选择你开启https的方式,官网有tomcat、apache、nginx、IIS等几种。其他我没试过,就选的tomcat方式。然后下载证书,点击“下载”后,就会显示出来前面提到的那几种开启方式。其实官网中每种方式的证书下载旁边都有帮助文档,会有文章教大家如何下载,如何部署。但是,我按照给的帮助文档部署失败了,所以自己在网上各种查资料。整了好几个晚上终于弄出来了。
4.tomcat版本的SSL证书下载下来是个ZIP压缩文件,解压后里面会有2个文件,一个以pfx为后缀的文件,一个txt文件。pfx文件就是证书文件,txt文件中是证书的密码。然后你用ftp软件(我用的fileZilla)链接自己的云服务器,把pfx文件上传到tomcat的安装目录下的conf目录中,我的目录是:/usr/local/apache-tomcat-9.0.11/conf
5.然后要修改同为conf目录下的server.xml文件的内容。这里就是一个巨坑的地方!!!一定注意自己tomcat的版本,版本不一样配置方式就不一样!而且官网的帮助文档也有说明,tomcat9及以上的版本和之下的版本的配置不一样。
这里我给出tomcat9的配置内容:主要是修改2个地方
第一个需要修改的配置:
这里说明下这样修改的意思,把原来的8080端口修改为80后,访问项目时就不需要在url中带端口了,比如原来的网址是http://abc.cn:8080/ns,而修改配置后网址就是http://abc.cn/ns这样的。但是!!!!坑就来了。很多博客文章都说是这样配置的,其实你也可以不这样,仍沿用原配置。而一旦你把端口改为80,那你的网址abc.cn必须要去工信局备案!不然你就死活访问不了,你一输入网址访问,好一点的情况下会给你个提示页面说这个网站没有备案需要备案,不好的情况直接给你个404你还不晓得为啥子!就因为这原因把我坑惨了,今天把网站备案了才终于解决这问题。
备案其实也简单,你到阿里云官网去备案提交资料,然后会有客服打电话给你核实,如果是公司性质的就比较麻烦需要提供营业执照之类的各种资料,我这边是一个人的名义备案的,手续简单很多。而且如果是个人名义备案,你的网站名字就不能填写公司、行业相关的字眼,不然通过不,我在客服的提示之下修改成“个人测试”。
第二处需要修改的配置:
这里解释一下:certificateKeystoreFile是你SSL证书存放的路径,我是放在conf下的,所以使用的相对路径conf/gdf.pfx,certificateKeystoreType这个值如果你是pfx格式的SSL证书就是PKCS12,certificateKeystorePassword就是你下载的那个ZIP解压后txt文件里面的内容,这个内容就是密码。
这个配置文件中启用https的方式你会发现有2中,都是以port="8443"开头的这段配置。第一种就是图中这种NIO模式,第二种就是下面的
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
这个配置中的APR模式,默认情况我们用NIO模式。所以我这里用的就是NIO的配置,因为APR模式还要做其他一些环境配置,比较麻烦,我急没试。。。。
解释下配置的内容:端口我把8443改为了443,是因为https的默认端口就是443,这样改完了访问https的url时就不用写端口了。比如不改端口访问时是这样的https://abc.cn:8443/ns,而改成443后是这样的https://abc.cn/ns。当然这个端口你不改也可,就访问时要在url要写上端口号。这里的端口号要和第一处配置的那个 redirectPort="443" 中的端口号一致,这是因为如果你启用了http强制跳转https的话,如果第一处配置的redirectPort="443" 和 第二处配置的 port="8443"不一致会导致错误,当然如果你没有强制http跳转到https这里一不一致都无所谓了。
其实第一处配置是专门配置http访问时的端口情况的,第二处配置才是正真配置https访问时的端口配置,如果你没有让tomcat强制由http跳转到https访问,这两处配置没有多大关联性,这样你就可以同时用https方式和http方式访问你的项目。例如:
第一处你是这样配置的:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
第二处你是这样配置的:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/gdf.pfx" certificateKeystoreType="PKCS12" certificateKeystorePassword="7v5wHxKH"
/>
</SSLHostConfig>
</Connector>
那么你访问项目ns可以这样2中方式:
1. https://abc.cn/ns 2. http://abc.cn:8080/ns
那么前面说到强制http跳转https是怎么做到的呢?就是修改tomcat的conf目录下的web.xml文件,在文件最后面加上一段配置,就能实现http强制跳转https,配置如下:
<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>
当然,如果你想同时保留https和http2中方式访问,就不需加这个配置。
6.修改完tomcat的配置后,需要重启tomcat,然后就可以用https方式访问了。重启方式如下:
首先在阿里云服务器的管理终端页面中,输入命令 cd tomcat安装目录/bin (我的是: cd /usr/local/apache-tomcat-9.0.11/bin)定位到
tomcat的bin目录下,然后输入 ./shutdown.sh先关闭tomcat,再输入 ./startup.sh开启tomcat
7.关于有个配置是否需要配置进行下说明,因为我查的有些文章让配置而有的又没有让。最后才知道这个配置不是必须的,因为它是只有你使用外部web服务器来链接tomcat时才会用得到,如果你就是单个tomcat运行项目,这项配置就可以忽略。配置如下,也是在server.xml中的配置:原文如下
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
而修改也就主要是修改redirectPort="8443"的端口号,这个端口号要和第二处配置的port=“443”的端口号一致
用tomcat方式开启https访问时一定要注意tomcat的版本哦,版本不一样它的配置会不同的!其他版本的配置各位自行查询