同一Tomcat下配置多虛擬主機(jī),資料查了好久,按照別人說的配置,配置好了,但是發(fā)現(xiàn)了一個(gè)問題,Safari、Chrome都可以成功打開,唯獨(dú)Firefox說配置有問題,無法驗(yàn)證證書!以為Firefox有問題,然后升級(jí)版本之后依然不行!又在第三方網(wǎng)站上查詢域名,說證書不是可信的簽發(fā)者,也就是說無法驗(yàn)證證書的簽發(fā)者!
但是這里有個(gè)問題,當(dāng)只配置單個(gè)虛擬主機(jī)的時(shí)候是沒問題的,配置多個(gè)就不行了!然后查看了官方文檔,原來是需要配置CA證書才能驗(yàn)證,然后就把簽發(fā)者的CA證書配置上了,終于成功了!
Connector部分屬性配置參考
http://tomcat.apache.org/tomcat-9.0-doc/config/http.html
webapps目錄結(jié)構(gòu)如下
webapps/
├───domain
│ └─ROOT
├───x1
│ └─ROOT
└───x2
└─ROOT
? 網(wǎng)站要放在ROOT目錄下才能被識(shí)別
編輯 conf/server.xml
1.找到 443端口位置 做如下修改
# 未配置APR的 配置如下
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" URIEncoding="UTF-8" defaultSSLHostConfigName="domain.com">
<SSLHostConfig hostName="domain.com" caCertificateFile="conf/CA證書.pem">
<Certificate certificateKeyFile="conf/domain.key"
certificateFile="conf/domain.crt"
type="RSA" />
</SSLHostConfig>
<SSLHostConfig hostName="x1.domain.top" caCertificateFile="conf/CA證書.pem">
<Certificate certificateKeyFile="conf/x1.key"
certificateFile="conf/x1.crt"
type="RSA" />
</SSLHostConfig>
<SSLHostConfig hostName="x2.domain.top" caCertificateFile="conf/CA證書.pem">
<Certificate certificateKeyFile="conf/x2.key"
certificateFile="conf/x2.crt"
type="RSA" />
</SSLHostConfig>
</Connector>
# 1.配置了APR的 協(xié)議名更改為 "org.apache.coyote.http11.Http11AprProtocol"
# 2.使用HTTP 2.0 需要在Connector添加子節(jié)點(diǎn)
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
# tomcat 9.0 已存在默認(rèn)配置
找到Connector協(xié)議為`org.apache.coyote.http11.Http11AprProtocol`
取消注釋,相應(yīng)修改即可
<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" URIEncoding="UTF-8" defaultSSLHostConfigName="domain.com">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig hostName="domain.com" caCertificateFile="conf/CA證書.pem">
<Certificate certificateKeyFile="conf/domain.key"
certificateFile="conf/domain.crt"
type="RSA" />
</SSLHostConfig>
<SSLHostConfig hostName="x1.domain.top" caCertificateFile="conf/CA證書.pem">
<Certificate certificateKeyFile="conf/x1.key"
certificateFile="conf/x1.crt"
type="RSA" />
</SSLHostConfig>
<SSLHostConfig hostName="x2.domain.top" caCertificateFile="conf/CA證書.pem">
<Certificate certificateKeyFile="conf/x2.key"
certificateFile="conf/x2.crt"
type="RSA" />
</SSLHostConfig>
</Connector>
# defaultSSLHostConfigName:當(dāng)存在多個(gè)虛擬主機(jī)時(shí) 必須指定一個(gè)做為默認(rèn)值
# CA證書.pem 是你的https證書簽發(fā)機(jī)構(gòu)的中級(jí)證書
2.找到 Host 位置配置虛擬主機(jī),各主機(jī)的根目錄全部放在webapps內(nèi),這樣不用開啟多個(gè)服務(wù),各虛擬主機(jī)共用80端口
<Engine name="Catalina" defaultHost="domain.com">
<!-- domain -->
<Host name="domain.com" appBase="webapps/domain"
unpackWARs="true" autoDeploy="true">
<Alias>www.domain.com</Alias>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<!-- x1 -->
<Host name="x1.domain.com" appBase="webapps/x1"
unpackWARs="true" autoDeploy="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>
<!-- x2 -->
<Host name="x2.domain.com" appBase="webapps/x2"
unpackWARs="true" autoDeploy="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>
保存 重啟tomcat服務(wù)
至此 大功告成!
祝好運(yùn)!