【问题标题】:Using multiple SSL certificates in Tomcat 7在 Tomcat 7 中使用多个 SSL 证书
【发布时间】:2011-06-12 21:46:25
【问题描述】:

我一直在 Apache Tomcat 7 中使用通配符 SSL 证书。但现在我必须更新,我看到有这些 EV(扩展验证)SSL 证书,其中浏览器显示一个漂亮的绿色条,让用户感觉更好。这对我的网站很重要,所以我想要它!但我有多个子域,显然 EV SSL 证书本质上不是通配符。好吧,我有一定数量的子域,我可以为每个子域购买一堆(我肯定需要至少 2 个)EV SSL 证书。

我可以在 Tomcat 7 中进行设置,以便在 1 个 Web 应用程序上有多个 SSL 证书吗?给这台机器分配多个IP地址对我来说不是问题。

【问题讨论】:

    标签: ssl ssl-certificate tomcat7 tomcat


    【解决方案1】:

    如果没有 Java (6) 中不支持的服务器名称指示 (SNI),则每个 IP 地址需要一个证书。

    您可以使用address attribute 将 Tomcat 配置为使用具有不同 IP 地址和证书的多个连接器。

    例如:

    <Connector 
           port="8443" maxThreads="200" address="10.0.0.1"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="keystore1.jks" keystorePass="..."
           clientAuth="false" sslProtocol="TLS"/>
    <Connector 
           port="8443" maxThreads="200" address="10.0.0.2"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="keystore2.jks" keystorePass="..."
           clientAuth="false" sslProtocol="TLS"/>
    

    如果需要,您也可以使用相同的密钥库,并使用 keyAlias 属性(在 Connector 中)告诉连接器使用哪个密钥/证书(基于密钥库中的别名)。

    【讨论】:

    • 完美,正是我想要的。还没试过,会告诉你效果如何。
    • 哥们,可以设置域名代替ip吗?
    • 嗨@Bruno,只是想知道,是否可以在地址属性中使用域名而不是IP地址?因为我托管了很多网站,但它们都属于同一个 IP 地址。
    • @ChorWaiChun 我认为您唯一的其他选择是使用不同的端口
    【解决方案2】:

    我不确定“SNI”是否真的相关。

    但在您的情况下,典型的解决方案是所谓的 ssloffloading 或 ssl Termination: 即将你的tomcat放在一个apache后面,它配置为在同一个IP上使用多个虚拟主机/域名。您可以为 apache 中的每个 vhost 配置使用自己的 SSL 证书。

    这里有这个主题的分步指南:

    http://milestonenext.blogspot.de/2012/09/ssl-offloading-with-modjk-part-1.html

    【讨论】:

      【解决方案3】:

      我正在使用 tomcat 8.5,现在可以使用多个 SSL/多域配置 tomcat。这是我的配置。

          <Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
                 maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 
                 defaultSSLHostConfigName="localhost" >
      
          <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
          <SSLHostConfig hostName="localhost">
              <Certificate certificateKeyFile="/$path/privkey.pem"
                           certificateFile="/$path/certificate.pem"
                           certificateChainFile="/$path/chain.pem"
                           type="RSA" />
          </SSLHostConfig>
             <SSLHostConfig hostName="domainname.com">
              <Certificate certificateKeyFile="/$path/privkey.pem"
                           certificateFile="/$path/certificate.pem"
                           certificateChainFile="/$path/chain.pem"
                           type="RSA" />
          </SSLHostConfig>
      
      </Connector>
      

      【讨论】:

        【解决方案4】:

        我刚刚在具有多个 SSL 和 IP 的服务器上工作

        以这种方式添加 IP:
        http://www.loadtestingtool.com/help/how-setup-ip.shtml

        添加了代码以使服务器使用“密码”(当具有 2048 位密钥时)使用最大可能的安全性。

        首先测试这将通过这种方式与自签名密钥一起使用:
        http://community.jboss.org/wiki/GeneratingSelfSignedCertificateWithKeytool
        请注意,此页面中的测试在“-keystore”文本的开头有错误字符(在多个地方)。

        代码如下:

        <Connector protocol="org.apache.coyote.http11.Http11Protocol" address="###.###.###.##1" port="443" minSpareThreads="5"
            enableLookups="true" acceptCount="100" maxThreads="200"
            scheme="https" secure="true" SSLEnabled="true" keystoreFile="key1.key"
            keystorePass="password1" clientAuth="false" sslProtocol="TLS"
            ciphers="SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"/>
        
        <Connector protocol="org.apache.coyote.http11.Http11Protocol" address="###.###.###.##2" port="443" minSpareThreads="5"
            enableLookups="true" acceptCount="100" maxThreads="200"
            scheme="https" secure="true" SSLEnabled="true" keystoreFile="key2.key"
            keystorePass="password2" clientAuth="false" sslProtocol="TLS"
            ciphers="SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"/>
        

        【讨论】:

        • 嗨@Zuul,只是想知道,是否可以在地址属性中使用域名而不是IP地址?因为我托管了许多网站,但它们都属于同一个 IP 地址。
        【解决方案5】:

        您可以让生活更轻松,获得EV SAN(也称为 UCC)并将每个域添加为主题备用名称字段中的条目。如果要使用多个 IP 地址,只需导出证书并将其重新导入每个 IP 地址(如果您正在运行 Windows,http://www.ssltools.com/manager 非常适合)。 EV SAN 证书的一个很好的例子是在https://www.ssl.com 找到的证书,只需检查它。

        【讨论】:

          猜你喜欢
          • 2012-04-27
          • 1970-01-01
          • 2015-08-07
          • 2017-05-25
          • 1970-01-01
          • 2019-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多