【问题标题】:Error code: SEC_ERROR_BAD_SIGNATURE installed SSL Certificate on Tomcat错误代码:SEC_ERROR_BAD_SIGNATURE 在 Tomcat 上安装了 SSL 证书
【发布时间】:2020-04-23 21:25:27
【问题描述】:

我从 Comodo 为我的域购买了 SSL 证书。 Comodo 提供给我的文件是:

  1. SSL_PrivateKEY_www_my-domain_com.txt
  2. SSL_CSR_www_my-domain_com.txt
  3. AddTrustExternalCARoot.crt
  4. USERTrustRSAAddTrustCA.crt
  5. SectigoRSADomainValidationSecureServerCA.crt
  6. 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。接下来,我在keystore中导入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 上遇到的错误

错误代码: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 tomcat installation ssl-certificate tomcat8


    【解决方案1】:

    在与 SSL 证书提供商联系后,我找到了解决方案,即:

    1. 首先,我必须创建一个名为 my.bundle 的捆绑文本文件,其顺序如下:
    • SectigoRSADomainValidationSecureServerCA.crt
    • USERTrustRSAAddTrustCA.crt
    • AddTrustExternalCARoot.crt
    1. 其次,您必须使用 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 是我们在上一步中创建的文件。

    1. 下一步是运行命令:

    keytool -importkeystore -srckeystore pkcs12FileName.p12 -srcstoretype pkcs12 -destkeystore jksFileName.jks -deststoretype jks

    这里的pkcs12FileName.p12是上一步生成的文件,重命名为p12(convert pfx format to p12)

    1. 接下来的步骤只是在KeyStore Explorer的帮助下将上一步导出的jks转换为pkcs12类型。

    2. 最后,conf/server.xml中的tomcat连接器是:

      连接器端口="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" SSLEnabled="true" acceptCount="100" 方案="https" 安全="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/opt/sslcertificates/www_my-domain_com.jks" keystorePass="我的密码"

    而且效果很好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2017-03-18
      • 2018-04-19
      • 1970-01-01
      相关资源
      最近更新 更多