侧边栏壁纸
博主头像
qiql博主等级

水能载舟,亦可赛艇

  • 累计撰写 33 篇文章
  • 累计创建 28 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

⚙️在同一台TomCat服务器上为多域名分别配置CA证书

qiql
2022-07-19 / 0 评论 / 0 点赞 / 468 阅读 / 1,818 字

前言

我的服务器环境: TomCat 8.5.69 、 jdk 1.8.301

两个域名:www.a.com 和www.b.com

需求:

  • 两个域名解析到同一个ip
  • 两个域名分别是两个网站,即域名所指向的网站资源文件夹不同
  • 两个域名都需要配置CA证书

本文默认读者已经知道怎么给单域名配置CA证书了

下载证书

一开始,我按照阿里云的文档来的,它让我下载pkf格式的证书,但是后面死活配不出来,就放弃了,所以后面在看到https://developer.aliyun.com/article/673873这篇文章后,改用jks格式的证书

注意:证书之间可以用命令转换,而且密码都是同一个密码,但是为了方便起见你可以重新下载,重新下载后就必须要用新密码了,每次下载都会产生新的密码

证书其实可以放在Tomcat安装目录里面的任意位置,但是为了方便管理,你可以按照阿里云的说法,放到conf目录下,也可以新建一个cert目录,然后把证书放进去,你也不一定要把密码文件也放上去。

为不同域名指向不同文件夹

进入Tomcat的conf目录下,找到server.xml文件

<Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="www.a.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
      	<Context path="" docBase="/opt/apache-tomcat-8.5.69/webapps/a/" debug="0" reloadable="true" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
      <Host name="a.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="/opt/apache-tomcat-8.5.69/webapps/a/" debug="0" reloadable="true" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
      <Host name="www.b.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="/opt/apache-tomcat-8.5.69/webapps/b/" debug="0" reloadable="true" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
      <Host name="b.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="/opt/apache-tomcat-8.5.69/webapps/b/" debug="0" reloadable="true" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
</Engine>

我建议你的代码跟我不要相差的太多,尤其是第一行,必须写上defaultHost=“localhost” 不写的话网站访问不了

下面的host标签中的name属性处填你的域名,你在给单域名配置CA证书的时候,可能或许在你的server.xml文件中只有一个host,但是我试了一下,一个域名现在必须要两个host,一个是带www的,一个是不带www的,很奇怪,因为你解析的时候肯定两条记录都解析了,但是这么改就对了,否则你可能只能以a.com或者www.a.com访问,后面的属性相信你能看懂,看不懂也没关系,只要改docBase属性里面的值就OK,这个目录就是域名所指向的网站资源文件目录。Context标签中的path属性就填空串即可,除非你知道你在做什么。

value标签照搬我的就行

配置CA证书

直接看代码:

<Connector port="443"   
        protocol="org.apache.coyote.http11.Http11NioProtocol"   
          maxThreads="150"
          SSLEnabled="true" URIEncoding="UTF-8" defaultSSLHostConfigName="a.com">
        <SSLHostConfig hostName="a.com">
            <Certificate       
             certificateKeystoreFile="证书的绝对路径"
             certificateKeystorePassword="这里是证书的密码" 
             type="RSA" /><!-- 如果你用的jks证书,这里一定得照搬,不要被阿里云的文档忽悠了,亲测,如果你是pfx,多试几次吧>
        </SSLHostConfig>
        <SSLHostConfig hostName="b.com">
            <Certificate       
             certificateKeystoreFile="证书的绝对路径"
             certificateKeystorePassword="这里是证书的密码"
             type="RSA" /><!-- 如果你用的jks证书,这里一定得照搬,不要被阿里云的文档忽悠了,亲测,如果你是pfx,把这行改成下面那行,然后开始无休止的调试把-->
             <!--certificateKeystoreType="PKCS12" />-->
        </SSLHostConfig>
    </Connector>

第四行 一定得有defaultSSLHostConfigName属性!!!否则配置不成功,你一个网站都上不去

如果你跟我一样,也用的是Tomcat8,假如你现在不知道怎么配多张CA证书,那么不管你之前用的什么方式配置的CA证书,直接把之前的注释掉,用我的这种方式来配,因为我之前给我的单域名是这样配置CA证书的:

<Connector port="443"
               protocol="HTTP/1.1"
               SSLEnabled="true"
               scheme="https"
               secure="true"
               keystoreFile="/opt/apache-tomcat-8.5.69/cert/xxxx_iqiql.com.pfx"
               keystoreType="PKCS12"
               keystorePass="c27U256u"
               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"/>

我把这段完全注释掉了,因为我不知道怎么用这种方式配多个CA证书,找遍了都没有找到

补充与参考

进入Tomcat的bin目录下:

./shutdown.sh

关闭Tomcat

然后执行命令

./start.sh

以启动Tomcat

然后!!!可以查下进程看看是否真的启动成功!命令如下:

ps =ef|grep tomcat

Tomcat启动后要等一段时间,才能访问你的网站,大概三五分钟吧,所以你可能会遇到重启后老是打不开网站的情况,稍微等一等就OK了,至少Tomcat8是这样

我的个人网站:iqiql.com,欢迎访问!

参考:

https://developer.aliyun.com/article/673873?spm=5176.21213303.J_6704733920.15.46a03edaNSZ9dC&scm=20140722.S_community%40%40文章%40%40673873..ID_community%40%40%E6%96%87%E7%AB%A0%40%40673873-RL%E5%A4%9ACA%E8%AF%81%E4%B9%A6-OR_main-V_2-P0_2

https://help.aliyun.com/document_detail/102939.html?spm=5176.21213303.J_6704733920.7.24373edaaU6Nor&scm=20140722.S_help%40%40文档%40%40102939.S_0%2Bos0.ID_102939-RL_ca证书部署-OR_helpmain-V_2-P0_0

https://juejin.cn/post/6987024327086456840

https://cloud.tencent.com/developer/article/1706764

https://www.cxyzjd.com/article/qq_36598097/96482830

https://www.its404.com/article/kukulongzai_123/88840171

https://developer.aliyun.com/article/443155?spm=a2c6h.12873639.0.0.7b9064bcGOixXJ

https://developer.aliyun.com/article/673873

0

评论区