【问题标题】:What are the steps to configure SSL for Tomcat?为 Tomcat 配置 SSL 的步骤是什么?
【发布时间】:2020-04-16 03:37:11
【问题描述】:

我对在本地计算机上为 Tomcat 配置 SSL 有点困惑。首先,我是否需要使用 keytool 创建一个新的密钥库?然后我应该将现有的.pfx 证书文件导入到新创建的 java 密钥库(.jks 文件)吗?最后导出一个新的 blabla.pfx 文件并添加一个在 443 端口上运行的新连接器,如下所示:

<Connector SSLEnabled="true" acceptCount="100" clientAuth="false" disableUploadTimeout="true" 
enableLookups="false" keystoreFile="C:/dev/certificates/blabla.pfx" keystorePass="12345" 
keystoreType="PKCS12" maxThreads="25" port="443"   protocol="org.apache.coyote.http11.Http11NioProtocol" 
scheme="https" secure="true"` sslProtocol="TLS"/>

什么是证书?我是否还应该创建一个新的 cacerts 文件并将其添加到本地服务器?我是否需要做一些事情以使其受到信任?您能否解释将现有证书添加到本地 Tomcat 的正确和必要的顺序。 非常感谢。

【问题讨论】:

  • Java 服务器是什么意思?
  • @mentallurg tomcat 服务器
  • 一个完全不同的建议:在 Tomcat 前面放置一个反向代理,然后让它做 SSL 工作
  • 为 Tomcst 配置 SSL 的步骤已清楚记录。

标签: java tomcat ssl-certificate


【解决方案1】:

这取决于...这取决于您的目标(您是否希望将其配置为尽可能类似于生产环境?您是否要考虑性能?)以及您拥有什么(例如,您的 JRE 是否支持 TLS 1.3?)

我假设您只想通过尽可能简单的配置获得 SSL / TLS,并且在这个阶段您不想太在意安全性(在许多情况下这都很好)。

您说有一个现有的 .pfx 证书。我认为这是一个自签名证书。那么这就是你所需要的。您不需要任何进一步的导入、导出、转换。

您使用的配置格式已弃用。我建议你使用 and 。

您的配置如下所示:

    <Connector
            port="443"
            protocol="org.apache.coyote.http11.Http11NioProtocol"
            maxThreads="25"
            SSLEnabled="true">
        <SSLHostConfig>
            <Certificate
                    certificateKeystoreFile=".../your_existing_localhost.pfx"
                    certificateKeystorePassword="12345"
                    type="RSA" />
        </SSLHostConfig>
    </Connector>

这假设 .pfx 包含一个证书。如果你在同一个 .pfx 文件中有多个证书,你应该指定 Tomcat 应该使用的证书的别名:

    <Connector
            port="443"
            protocol="org.apache.coyote.http11.Http11NioProtocol"
            maxThreads="25"
            SSLEnabled="true">
        <SSLHostConfig>
            <Certificate
                    certificateKeystoreFile=".../your_existing_localhost.pfx"
                    certificateKeyAlias="your_certificate_alias"
                    certificateKeystorePassword="12345"
                    type="RSA" />
        </SSLHostConfig>
    </Connector>

将私钥与证书保存在同一存储区并不是最佳做法。您可以将证书放在一个文件中(不受保护且易于访问) 和另一个人的私钥(用密码加密和保护)。然后配置如下:

    <Connector
            port="443"
            protocol="org.apache.coyote.http11.Http11NioProtocol"
            maxThreads="25"
            SSLEnabled="true">
        <SSLHostConfig>
            <Certificate
                    certificateFile=".../localhost_certificate.cer"
                    certificateKeyFile=".../localhost_private_key.pkcs8"
                    certificateKeyPassword="56789"
                    type="RSA" />
        </SSLHostConfig>
    </Connector>

称为“cacerts”的文件包含您信任的证书颁发机构的证书。如果您在 Tomcat 上部署了一些应用程序,并且该应用程序将通过 SSL/TLS 访问其他一些服务器,那么您将需要建立对该外部服务器的信任。然后,您需要在“cacerts”存储中注册该服务器的证书(或一些颁发它的“上游”CA 的证书)。但在您的情况下 - 当您只想通过 SSL/TLS 访问您的 Tomcat 时 - 没有必要。

对于您的问题“我是否需要做一些事情以使其受到信任?”让它信任谁?:对于你在同一主机上运行的浏览器?对于您在本地网络中的其他主机(计算机、智能手机、其他设备)上运行的浏览器?您不能强制客户端信任您的自签名证书。如果您本地网络中的用户通过 HTTPS 访问您的 Tomcat,则每个用户都必须为您的自签名证书显式添加一个例外。要使您的 Tomcat 自动 被您在同一主机上运行的浏览器 信任,您可以尝试 mkcert。为了使您的 Tomcat自动 被从其他主机访问您的 Tomcat 的浏览器信任,您需要将您的 Tomcat 放到公共互联网上,注册一个域名,获得一个证书从某个受信任的 CA 获取此域,并通过公共 Internet 访问您的 Tomcat。

【讨论】:

    【解决方案2】:

    您可以一步完成,无需使用 keytool,使用 this web-based tool 生成私钥,创建 CSR,导入全链,将其全部保存为密钥库文件(现在为 P12 格式),以及显示了正确的连接器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2018-08-01
      • 2017-05-17
      • 2011-08-27
      相关资源
      最近更新 更多