前言
我的服务器环境: 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 "%r" %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 "%r" %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 "%r" %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 "%r" %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://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
评论区