首页 > 解决方案 > 为 Tomcat 配置 SSL 的步骤是什么?

问题描述

我对在本地计算机上为 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 的正确和必要的顺序。非常感谢。

标签: javatomcatssl-certificate

解决方案


这取决于...这取决于您的目标(您是否希望将其配置为尽可能类似于生产环境?您是否要考虑性能?)以及您拥有什么(例如,您的 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 放到公共 Internet,注册一个域名,从某个受信任的 CA 获取该域的证书,然后通过公共 Internet 访问您的 Tomcat。


推荐阅读