我在 tomcat 7 (7.0.10) 上配置 SSL 时遇到问题,我正在使用 Thawte SGC 证书,请仔细阅读下面的描述帮助我解决问题。 我已经按照下面的步骤
1)使用以下命令生成 key
keytool -genkey -keysize 2048 -alias test_self_certificate -keyalg RSA -keystore test_self_certificate.jks -validity 730
此命令在当前文件夹中生成“test_self_certificate.jks”文件
2) 使用以下命令生成 CSR
keytool -certreq -alias test_self_certificate -file my_application.csr -keystore test_self_certificate.jks
此命令在当前文件夹中生成“my_application.csr”文件
3) 然后我将此 CSR 提交给 Thawte 并从他们那里获得了 PKCS#7 格式的证书,我在记事本中复制了该证书文本并将该文件保存为“signed_certificate.p7b”
4) 然后我使用下面的命令创建了新的 JKS keystore 并导入了从 Thawte 收到的证书
keytool -import -alias signed_cert -trustcacerts -file signed_certificate.p7b -keystore tomcat_application.jks
此命令在当前文件夹中生成“tomcat_application.jks”文件
5) 我已经更新了 tomcat server.xml 如下(我提供了正确的 .jks 文件路径和 keystore 密码)
<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)
重要说明:但是如果我在 keystore 中导入从 Thawte 收到的证书(test_self_certificate.jks -- 在上面的第一步中提到),我已经创建它来生成 KeyPair 和CSR,并使用该 keystore 配置 tomcat(如上文第 6 步中所述),然后 Tomcat 以 SSL 模式启动,但在尝试启动 HTTPS URL 时,我收到不受信任的证书警告。
最佳答案
keytool -genkey -keysize 2048 -alias test_self_certificate [...]
此处,-genkey
生成一个公钥/私钥对并存储到“test_self_certificate”别名条目中,从而使其成为一个私钥条目。 (如果您使用 keytool -list
,您将看到一些私钥条目和一些证书条目)。 -genkey
还会自动生成一个自签名证书与这个私钥关联(这也是默认情况下有效存储公钥的方式)。
keytool -import -alias signed_cert [...]
如果您获得为存储在 keystore 中的私钥颁发的证书,则需要将此证书存储在正确的私钥条目中,而不仅仅是任何条目。在这里,您应该使用 -alias test_self_certificate
代替(这也可能意味着它不是别名的最佳选择,但这只是一个细节)。
(在某些情况下,您可能还需要 make sure you import the full chain 。)
关于tomcat 7 (7.0.10) 上的 SSL 我在这里使用 Thawte SGC 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23932186/