java - 为 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 的正确和必要的顺序。非常感谢。
解决方案
这取决于...这取决于您的目标(您是否希望将其配置为尽可能类似于生产环境?您是否要考虑性能?)以及您拥有什么(例如,您的 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。
推荐阅读
- python - 如何从 python dict 创建 avro Schema
- amazon-web-services - 传出网络性能 (AWS)
- android - 使用 mutableStateOf 而不是 observeAsState
- javascript - 我正在尝试设置角色命令和设置频道命令。我试图这样做,但它不起作用
- vba - MS Word VBA 链接多个部分和页面的上一个页脚
- python - 为多年的每个月创建嵌套条形图
- python - 使用 pandas 合并 csv 行
- sql-server - TSQL 函数 - 记忆(几乎就像 Python 中的一样)
- ruby-on-rails - 从 CSV 文件创建设计用户 - Rails - PG
- javascript - Nodejs,我的代码有时会在反序列化文件中暂停