首先,我知道已经提出了类似的问题,我试图按照建议进行故障排除,但没有运气。所以,我认为我最好只是发帖寻求帮助。提前感谢您的帮助。
问题:我做错了什么?我应该检查什么/在哪里?
目标:我正在尝试在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
答案 0 :(得分:0)
<Certificate certificateKeystoreFile="D:\cert.jks" type="RSA" keystorePass="123456" />
探测器在这里。密钥库类型是JKS,而不是RSA 1 。 密钥对类型为RSA。
您可能还需要将密钥对/证书条目重命名为&#34; tomcat&#34;或者Tomcat 8中的默认值,或者告诉Tomcat使用别名&#34; cert&#34; (选择不当)。
keytool
指定任何其他类型。答案 1 :(得分:-1)
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和商店类型的更多信息。这里有一个有趣的主题:How to create a BKS (BouncyCastle) format Java Keystore that contains a client certificate chain