阿里云ECS服务器tomcat9开启https访问

因为准备做小程序,所以需要给以前的网站开启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的版本哦,版本不一样它的配置会不同的!其他版本的配置各位自行查询

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值