我正在 Amazon EC2 上运行 Tomcat 应用程序,并且有一个指向 IP 地址的域。我可以通过 HTTP 连接到 IP,但我想通过 HTTPS 连接。
首先,我自签名了一份证书,我的
server.xml
看起来像这样:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"
maxParameterCount="1000"
/>
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
maxParameterCount="1000"
>
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeystoreFile="path/to/cert"
type="RSA" />
</SSLHostConfig>
</Connector>
我能够通过 HTTPS 连接,但不出所料地出现了
MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT
错误。
然后我检查了我的域名提供商,发现他们提供了 SSL(通过 PositiveSSL,如果重要的话)。我购买了一个,并按照文档建议设置了 CNAME 记录:
接下来我该怎么办?我仍然无法通过 HTTPS 连接。我是否以有效的密钥库形式获取证书并将其传递给
Connector
标签?我的域是否通过 HTTPS 处理连接,并且仅通过 HTTP 与我的 Tomcat 应用程序交互?
我走在正确的道路上。当我设置 CNAME 记录时,应该会出现一个下载证书的链接。问题是,在我的 CNAME 主机中,我附加了域名,即
_272731238792139323.example.com
,而它本应是 _272731238792139323
,因为域名是自动附加的。
当我更正此问题时,我的证书已自动验证,并且我通过电子邮件发送了我的
.crt
和 .ca-bundle
文件。我将它们复制到我的服务器上,并尝试将它们复制到我的密钥库,但我意识到当我应该生成 JKS 文件时,我首先生成了 CSR 文件,然后然后 生成一个 CSR,并将其提供给证书颁发者.
所以我这样做了,重新颁发了我的证书,再次设置了 CNAME,并提供了一个新的证书可供下载。我将其复制到我的服务器上,我必须将我的
.crt
和 .ca-bundle
文件转换为 .p7b
,以便它们可以导入到我的密钥库中,我这样做了:
openssl crl2pkcs7 -nocrl -certfile your_file.crt -out your_file.p7b -certfile your_file.ca-bundle
然后我就跑了:
keytool -import -trustcacerts -alias tomcat -file your_file.p7b -keystore yourkeystore.jks
最后我更新了 tomcat/conf 目录中的
server.xml
文件,将 SSL 连接器编辑为如下所示:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
maxParameterCount="1000"
>
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/certs/yourkeystore.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
我重新启动了 Tomcat,并且能够通过 HTTPS 访问我的域。