Ssl

在 Tomcat 8.5 中為一個站點/域禁用 SSL

  • April 25, 2021

我們目前有一個執行 Tomcat 8.5 的 Ubuntu 伺服器,它託管來自不同域的兩個網站。這是一個奇怪的情況,但長話短說,我們需要為兩個站點之一禁用 SSL,並為另一個站點保持 SSL 正常工作。此伺服器目前有一個 IP 地址。兩個站點名稱的結構如下:

site1.a.net
site2.a.com

我們想為 site1.a.net 禁用 SSL,並為 site2.a.com 保持啟用 SSL。這在 Tomcat 8.5 中可行嗎?

[為了不使用任何註冊的域,讓我們使用site1.example.netsite2.example.com],它們是為文件目的而保留的。]

從 HTTPS 到 HTTP 的重定向與通過 twitch 從 HTTP 到 HTTPS 的重定向的工作方式相同:當客戶端打開時https://site1.example.net,伺服器必須提供受信任的 TLS 證書,site1.example.net 然後才能進行任何重定向。否則將導致瀏覽器中出現安全警告。我會為此使用 Let’s Encrypt 證書。

否則你只需要<Host>在你的<Engine><Certificate>你的<Connector>. 您的site1.example.com主機需要RewriteValve執行重定向:

<Service name="Catalina">
   <!-- HTTP connector -->
   <Connector port="80" redirectPort="443"/>
   <!-- HTTPS connector -->
   <!-- If the client does not use SNI it ends up with site1.example.net certificate -->
   <Connector port="443" SSLEnabled="true" scheme="https" secure="true"
              defaultSSLHostConfigName="site1.example.net">
       <SSLHostConfig hostName="site1.example.net">
           <Certificate certificateFile="conf/site1.example.net.crt" certificateKeyFile="conf/site1.example.net.key" />
       </SSLHostConfig>
       <SSLHostConfig hostName="site2.example.com">
           <Certificate certificateFile="conf/site2.example.com.crt" certificateKeyFile="conf/site2.example.com.key" />
       </SSLHostConfig>
   </Connector>
   <!-- If a client doesn't send a Host: header or puts the IP in the Host: header it ends up on site1.example.net -->
   <Engine defaultHost="site1.example.net" name="Catalina">
       <Host appBase="webapps/site2.example.com" name="site2.example.com">
           ...
       </Host>
       <Host appBase="webapps/site1.example.net" name="site1.example.net">
           <!-- We need it for the redirect -->
           <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
       </Host>
   </Engine>
</Service>

為了配置RewriteValve你只需要創建一個conf/Catalina/site1.example.net/rewrite.config包含內容的文件

# If the client connected through HTTPS
RewriteCond %{HTTPS} on
# Temporarily redirect to the HTTP version
RewriteRule ^ http://site1.example.net%{REQUEST_PATH} [R,L]

引用自:https://serverfault.com/questions/1061245