Tomcat 上的证书配置

问题描述 投票:0回答:2

首先,我知道已经有人问过类似的问题,我尝试按照建议进行故障排除,但没有成功。所以,我认为我最好还是发帖寻求帮助。预先感谢您的帮助。

问题:我做错了什么?我应该检查什么/哪里?

目标:我正在尝试在 Tomcat 上设置证书。我有 Tomcat 8.5、%JAVA_HOME%="C:\Program Files\Java\jdk1.8.0_121" 和使用以下命令生成的证书:

keytool -genkeypair -alias cert -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keypass 123456 -storepass 123456 -keystore d:\cert.jks

并填写我的姓名和其他信息等来生成密钥对。

我看到许多 YouTube 视频和其他说明都提到“genkey”而不是“genkeypair”,但此选项在此计算机上不可用。不管怎样,我修改了 server.xml 文件,添加了以下内容:

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true">
  <SSLHostConfig>
    <Certificate certificateKeystoreFile="D:\cert.jks" type="RSA" keystorePass="123456" />
  </SSLHostConfig>
</Connector>

执行 catalina configtest 给了我这个:

04-Apr-2017 19:28:16.271 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["https-jsse-nio-443"]
 java.lang.IllegalArgumentException: java.io.IOException: Keystore was tampered with, or password was incorrect
java tomcat ssl-certificate tomcat8 keytool
2个回答
0
投票
<Certificate certificateKeystoreFile="D:\cert.jks" type="RSA" keystorePass="123456" />

问题来了。密钥库类型是 JKS,而不是 RSA1keypair 类型是 RSA。

您可能还必须将密钥对/证书条目重命名为“tomcat”或 Tomcat 8 中的默认值,或者告诉 Tomcat 使用别名“cert”(糟糕的选择)。

  1. 因为您没有为
    keytool
    指定任何其他类型。

-2
投票

FWIW,我可以让它与 HTTP/1.1 协议一起工作 - 更简单。

基本都换了

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true">
  <SSLHostConfig>
    <Certificate certificateKeystoreFile="D:\cert.jks" type="RSA" keystorePass="123456" />
  </SSLHostConfig>
</Connector>

有了这个

<Connector port="443" protocol="HTTP/1.1"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 
               clienAuth="false" sslProtocol="TLS" keystoreFile="/conf/.keystore" keystorePass="123456" />

继续阅读有关 Tomcat 和存储类型的更多信息。这里有一个有趣的线程:如何创建包含客户端证书链的 BKS(BouncyCastle)格式 Java 密钥库

© www.soinside.com 2019 - 2024. All rights reserved.