在 Tomcat 8.5 中禁用一个站点/域的 SSL

在 Tomcat 8.5 中禁用一个站点/域的 SSL

我们目前有一台运行 Tomcat 8.5 的 Ubuntu 服务器,它托管来自不同域的两个网站。这是一个奇怪的情况,但长话短说,我们需要为其中一个站点禁用 SSL,并保持另一个站点的 SSL 正常运行。此服务器目前有一个 IP 地址。这两个站点名称的结构如下:

site1.a.net
site2.a.com

我们想禁用 site1.a.net 的 SSL,并保持 site2.a.com 的 SSL 启用。这在 Tomcat 8.5 中可行吗?

答案1

[为了不使用任何注册域名,我们使用site1.example.netsite2.example.com],仅用于文档目的。]

从 HTTPS 重定向到 HTTP 的工作原理与从 HTTP 重定向到 HTTPS 的工作原理相同,但略有不同:当客户端打开时https://site1.example.net,服务器必须提供受信任的 TLS 证书site1.example.net 任何重定向都是可能的。如果不这样做,浏览器就会出现安全警告。我会为此使用 Let's Encrypt 证书。

否则,你只需要<Host>在你的 中配置两个 s <Engine>,在你的 中配置两个<Certificate>s <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]

相关内容