错误代码:SEC_ERROR_BAD_SIGNATURE 在 Tomcat 上安装了 SSL 证书
Error code: SEC_ERROR_BAD_SIGNATURE installed SSL Certificate on Tomcat
我已经从 Comodo 为我的域购买了 SSL 证书。 Comodo 提供给我的文件是:
- SSL_PrivateKEY_www_my-domain_com.txt
- SSL_CSR_www_my-domain_com.txt
- AddTrustExternalCARoot.crt
- USERTrustRSAAddTrustCA.crt
- SectigoRSADomainValidationSecureServerCA.crt
- www_my-domain_com.crt
经过研究,我发现这个 Steps to create a .jks keystore using .key and .crt files...,我使用 3、4 和 5 crt 文件创建 cert.pem,然后我使用 1 crt 创建 key.pem。之后,我按照指南所说创建 jks。接下来,我在密钥库中导入 6 crt 文件,如下所示:
keytool -import -alias mykey -file www_my-domain_com.crt -keystore www_my-domain_com.jks
之后,我使用 keystore explorer 将我的密钥库转换为 PKCS12。最后,我将文件上传到我的服务器,这是我的 tomcat 8,连接器:
<Connector port="9443" maxHttpHeaderSize="8192" maxThreads="100"
minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
protocol="org.apache.coyote.http11.Http11Protocol"
SSLEnabled="true" clientAuth="false"
keyAlias="server" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"
keystoreFile="/home/test/ssls/www_my-domain_com.jks"
keystorePass="password" />
重新启动我的 tomcat 然后我在 firefox 上遇到的错误
Error code: SEC_ERROR_BAD_SIGNATURE
我还使用 KeyStore Explorer 检查 ssl 和显示的错误是:
javax.net.ssl.SSLKeyException: Invalid signature on ECDH server key exchange message
at sun.security.ssl.HandshakeMessage$ECDH_ServerKeyExchange.<init>(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
at org.kse.utilities.ssl.SslUtils.readSSLConnectionInfos(SslUtils.java:116)
at org.kse.gui.dialogs.DExaminingSsl$ExamineSsl.run(DExaminingSsl.java:207)
at java.lang.Thread.run(Unknown Source)
在与 SSL 证书提供商联系后,我找到了解决方案,即:
- 首先,我必须按以下顺序创建一个名为 my.bundle 的捆绑文本文件:
- SectigoRSADomainValidationSecureServerCA.crt
- USERTrustRSAAddTrustCA.crt
- AddTrustExternalCARoot.crt
- 其次,您必须 运行 使用 OpenSSL 以下命令:
openssl pkcs12 -export -in my.crt -inkey my.key -certfile my.bundle
-out my.pfx
其中my.crt是www_my-domain_com.crt,my.key是你的私钥,my.bundle是我们制作的文件上一步。
- 下一步是 运行 命令:
keytool -importkeystore -srckeystore pkcs12FileName.p12
-srcstoretype pkcs12 -destkeystore jksFileName.jks -deststoretype jks
这里的pkcs12FileName.p12是上一步生成的文件,重命名为p12(convert pfx format to p12)
接下来的步骤只是在 KeyStore Explorer.
的帮助下将上一步导出的 jks 转换为类型 pkcs12
最后,conf/server.xml中的tomcat连接符为:
Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150"
minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
disableUploadTimeout="true" SSLEnabled="true" acceptCount="100"
scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
keystoreFile="/opt/sslcertificates/www_my-domain_com.jks"
keystorePass="mypassword"
而且效果很好!
我已经从 Comodo 为我的域购买了 SSL 证书。 Comodo 提供给我的文件是:
- SSL_PrivateKEY_www_my-domain_com.txt
- SSL_CSR_www_my-domain_com.txt
- AddTrustExternalCARoot.crt
- USERTrustRSAAddTrustCA.crt
- SectigoRSADomainValidationSecureServerCA.crt
- www_my-domain_com.crt
经过研究,我发现这个 Steps to create a .jks keystore using .key and .crt files...,我使用 3、4 和 5 crt 文件创建 cert.pem,然后我使用 1 crt 创建 key.pem。之后,我按照指南所说创建 jks。接下来,我在密钥库中导入 6 crt 文件,如下所示:
keytool -import -alias mykey -file www_my-domain_com.crt -keystore www_my-domain_com.jks
之后,我使用 keystore explorer 将我的密钥库转换为 PKCS12。最后,我将文件上传到我的服务器,这是我的 tomcat 8,连接器:
<Connector port="9443" maxHttpHeaderSize="8192" maxThreads="100"
minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
protocol="org.apache.coyote.http11.Http11Protocol"
SSLEnabled="true" clientAuth="false"
keyAlias="server" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"
keystoreFile="/home/test/ssls/www_my-domain_com.jks"
keystorePass="password" />
重新启动我的 tomcat 然后我在 firefox 上遇到的错误
Error code: SEC_ERROR_BAD_SIGNATURE
我还使用 KeyStore Explorer 检查 ssl 和显示的错误是:
javax.net.ssl.SSLKeyException: Invalid signature on ECDH server key exchange message
at sun.security.ssl.HandshakeMessage$ECDH_ServerKeyExchange.<init>(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
at org.kse.utilities.ssl.SslUtils.readSSLConnectionInfos(SslUtils.java:116)
at org.kse.gui.dialogs.DExaminingSsl$ExamineSsl.run(DExaminingSsl.java:207)
at java.lang.Thread.run(Unknown Source)
在与 SSL 证书提供商联系后,我找到了解决方案,即:
- 首先,我必须按以下顺序创建一个名为 my.bundle 的捆绑文本文件:
- SectigoRSADomainValidationSecureServerCA.crt
- USERTrustRSAAddTrustCA.crt
- AddTrustExternalCARoot.crt
- 其次,您必须 运行 使用 OpenSSL 以下命令:
openssl pkcs12 -export -in my.crt -inkey my.key -certfile my.bundle -out my.pfx
其中my.crt是www_my-domain_com.crt,my.key是你的私钥,my.bundle是我们制作的文件上一步。
- 下一步是 运行 命令:
keytool -importkeystore -srckeystore pkcs12FileName.p12 -srcstoretype pkcs12 -destkeystore jksFileName.jks -deststoretype jks
这里的pkcs12FileName.p12是上一步生成的文件,重命名为p12(convert pfx format to p12)
接下来的步骤只是在 KeyStore Explorer.
的帮助下将上一步导出的 jks 转换为类型 pkcs12
最后,conf/server.xml中的tomcat连接符为:
Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" SSLEnabled="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/opt/sslcertificates/www_my-domain_com.jks" keystorePass="mypassword"
而且效果很好!