0

我在 tomcat 7 (7.0.10) 上配置 SSL 时遇到问题,我正在使用 Thawte SGC 证书,请仔细阅读下面的描述帮助我。我已经按照以下步骤

1)使用以下命令生成密钥

keytool -genkey -keysize 2048 -alias test_self_certificate -keyalg RSA -keystore test_self_certificate.jks -validity 730

此命令在当前文件夹中生成“<strong> test_self_certificate.jks ”文件

2)使用以下命令生成的 CSR

keytool -certreq -alias test_self_certificate -file my_application.csr -keystore test_self_certificate.jks

此命令在当前文件夹中 生成“<strong> my_application.csr ”文件

3)然后我已将此 CSR 提交给 Thawte 并从他们那里获得 PKCS#7 格式的证书,我已将该证书文本复制到记事本中并将该文件保存为“<strong> signed_certificate.p7b ”</p>

4)然后我使用以下命令创建了新的 JKS 密钥库并导入了从 Thawte 收到的证书

keytool -import -alias signed_cert -trustcacerts -file signed_certificate.p7b -keystore tomcat_application.jks

此命令在当前文件夹中生成“tomcat_application.jks ”文件

5)我更新了tomcat server.xml如下(我提供了正确的.jks文件路径和密钥库密码)

<Connector port="8001" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
                            maxThreads="150" scheme="https" secure="true"
               keystoreFile="/export/home/parsupport/Tomcat_certs/ tomcat_application.jks " keystorePass="parlive" clientAuth="false" sslProtocol="TLS" /> 

6)在我启动 Tomcat 时进行此更改后,我得到以下异常,并且 tomcat 不以 SSL 启动

Caused by: javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
    at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.checkEnabledSuites(SSLServerSocketImpl.java:310)
    at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(SSLServerSocketImpl.java:255)
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.checkConfig(JSSESocketFactory.java:774)

重要说明:但是如果我在密钥库中导入从 Thawte 收到的证书(test_self_certificate.jks - 上面提到的第一步),我创建该证书以生成 KeyPair 和 CSR ,并使用该密钥库来配置 tomcat(如上述步骤 6 中所述) ) 然后 Tomcat 以 SSL 模式启动,但在尝试启动 HTTPS URL 时,我收到不受信任的证书警告。

4

1 回答 1

0
keytool -genkey -keysize 2048 -alias test_self_certificate [...]

在这里,-genkey生成一个公钥/私钥对并存储到“test_self_certificate”别名条目中,从而使其成为私钥条目。(如果您使用keytool -list,您将看到一些私钥条目和一些证书条目)。-genkey还会生成一个自签名证书以自动与此私钥关联(这也是默认情况下有效存储公钥的方式)。

keytool -import -alias signed_cert [...]

如果您获得为存储在密钥库中的私钥颁发的证书,则需要根据正确的私钥条目存储此证书,而不仅仅是任何条目。在这里,您应该-alias test_self_certificate改用(这也可能意味着它不是别名的最佳选择,但这只是一个细节)。(在某些情况下,您可能还需要确保导入完整的链。)

于 2014-05-29T12:22:44.157 回答