【问题标题】:Tomcat SSL Cert Renewal Issue (SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure)Tomcat SSL 证书更新问题(SSL23_GET_SERVER_HELLO:sslv3 警报握手失败)
【发布时间】:2015-08-09 22:00:50
【问题描述】:

正在尝试续订本月早些时候过期的证书,但我似乎无法使用它。

  • Apache Tomcat 7.0.34
  • Centos
  • Java 1.7.0_65
  • (根证书)我已经分别尝试了 gdroot-g2_cross.crt(Java 根)gdroot-g2.crt 都没有成功
  • (中间证书)gdig2.crt
  • (tomcat Cert) GoDaddy给我的那个
  • 全新 SHA2
  • Instructions Used

一步一步我做了什么

  1. 使用已存在的密钥库通过 :
    keytool -certreq -keyalg RSA -alias tomcat -file csr.csr -keystore tomcat.keystore 生成 CSR
  2. 向 GoDaddy 提交新的 CSR
  3. 从 GoDaddy 接收证书
  4. 解压到我想要的目录
  5. 通过以下方式从密钥库中删除旧证书: keytool -delete -alias root -keystore tomcat.keystore (这也是使用 intermed 和 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 检查连接

(服务器是一个保存状态的虚拟机,所以当我破坏它时,我可以回到它工作的时候) 使用旧的 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

服务器.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,因为过去两年它一直在工作。

关于如何纠正这个问题的任何想法?

【问题讨论】:

    标签: java apache tomcat ssl https


    【解决方案1】:

    天哪,我觉得自己是个傻瓜,我想在创建密钥库时,当它要求输入 tomcat 的密码时,它想要我的 tomcat 管理员密码,不,只是保持与您的密钥库相同。

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

    Go daddy 出于某种原因给了你一个捆绑包。

    真是个愚蠢的错误。

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 2016-04-27
      • 2016-05-02
      • 2016-12-12
      • 2015-12-02
      • 1970-01-01
      • 2016-05-04
      相关资源
      最近更新 更多