Tomcat SSL证书续订问题(SSL23_GET_SERVER_HELLO:sslv3警报握手失败)

时间:2015-05-27 17:02:47

标签: java apache tomcat ssl https

尝试续订本月早些时候到期的证书,我似乎无法让它发挥作用。

  • Apache Tomcat 7.0.34
  • Centos
  • Java 1.7.0_65
  • (Root Cert)我已经尝试了两个 gdroot-g2_cross.crt(Java Root) gdroot-g2.crt 分开并且都没有工作
  • (中级证书) gdig2.crt
  • (tomcat Cert) GoDaddy给我的那个
  • 全新SHA2
  • Instructions Used

我一步一步做了什么

  1. 使用现有的密钥库通过以下方式生成CSR:
    keytool -certreq -keyalg RSA -alias tomcat -file csr.csr -keystore tomcat.keystore
  2. 将新CSR提交给GoDaddy
  3. 从GoDaddy获取证书
  4. 将它们解压缩到我想要的目录
  5. 通过以下方式从密钥库中删除旧证书: keytool -delete -alias root -keystore tomcat.keystore (这也是用中间体和tomcat完成的)
  6. 通过以下方式将新证书添加到密钥库: keytool -import -alias root -keystore tomcat.keystore -trustcacerts -file newrootfile.crt(我再次使用intermed和tomcat执行此操作)
  7. 检查server.xml(它仍然指向正确的密钥库,因为我重用了一个)
  8. 重启Tomcat
  9. catalina.out中没有错误,导入证书时没有错误。
  10. 尝试调出页面获取安全连接失败:FireFox(SSL_Error_no_cypher_overlap),Chrome(ERR_SSL_Version_Or_Cypher_Mismatch)
  11. 花了最后五天尝试不同的事情
    • 创建新密钥库而不是使用旧密钥库 - 再次出现错误,但没有安全连接失败,我得到无法连接
    • 使用GoDaddy存储库中的不同根证书
  12. 了解如何使用openssl检查连接
  13. (服务器是一个已保存状态的虚拟机,因此当我打破它时,我可以回到它工作时) 使用旧SHA1(已过期):

    $ openssl s_client -connect myhost:443
    
    CONNECTED(00000003)
    ---
    Certificate chain
    ...
    ...
    -----BEGIN CERTIFICATE-----
    ...
    ...
    -----END CERTIFICATE-----
    .....
    .....
    ----
    No client certificate CA names sent
    ----
    SSL handshake has read 4586 bytes and written 461 bytes
    ---
    New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA256
    server public key is 2048 bit
    ....
    SSL-Session:
       Protocol : TLSv1.2
       Cipher : DHE-RSA-AES256-SHA256
       ....
       Verify return code: 10 (certificate has expired)
    ---
    closed
    

    使用新的SHA2:

    $ openssl s_client -connect myhost:443
    
    CONNECTED(00000003)
    140219291584328:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:741
    ---
    no peer certificate available
    --
    No client certificate CA names sent
    ---
    SSL handshake has read 7 bytes and written 263 bytes
    ---
    New, (NONE), Cipher is (NONE)
    Secure Renegotiation is NOT supported
    Compression: NONE
    Expansion: NONE
    

    server.xml中

    <Server port="8005" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.security.SecurityListener" />
    <Listener className="org.apache.catalina.core.AprLifecycleListener" "SSLEngine="on" />
    <Listener className="org.apache.catalina.core.JasperListener" />
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
    <GlobalNamingResources>
      <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="path/to/users" />
    </GlobalNamingResources>
    <Service name="Catalina">
    <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="200" scheme="https" secure="true" clientAuth="false"
       sslProtocol="TLS" keystoreFile="path/to/keystore" 
       keystorePass="mykeystorepass" compression="on" />
    

    在我多年前开始工作之前,开发人员之前已经设置了所有内容,因此我假设他正确设置了server.xml,因为它已经在过去两年中运行了。

    有关如何纠正此问题的任何想法?

1 个答案:

答案 0 :(得分:1)

哦,天哪,我觉得自己很傻,我想在创建密钥库时,当它要求tomcat的密码时,它需要我的tomcat管理员密码,nope只是保持与密钥库一样。

此外, gdroot-g2.crt 是根别名所需的正确crt,您可以从其存储库中获取它。

由于某种原因,爸爸给你一捆。

这是一个愚蠢的错误。