【问题标题】:Using self-signed SSL certificate works, but CA signed certificate results in handshake alert failure 40 in response to client hello使用自签名 SSL 证书有效,但 CA 签名证书导致握手警报失败 40 以响应客户端问候
【发布时间】:2015-08-06 21:39:27
【问题描述】:

到目前为止,我已经使用 openssl、sslyze、keystore 实用程序和一些标准的 Windows 诊断命令来尝试描述这个问题。总结是,一旦我尝试使用其中包含 CA 签名证书的密钥库,我会在客户端打招呼后立即握手失败 40。连接永远不会到达带有 CA 证书的服务器问候。

在同一台机器 (Windows Server 2012) 上,如果我使用自签名证书,则连接按预期工作。

Openssl 显示带有 CA 证书的握手失败。

sslyze 显示所有被拒绝的密码,没有可用的密码或 TLS / 警报握手失败。

使用自签名证书成功的事实往往表明“基础”已经存在,客户端和服务器具有连接所需的密码等,并且 server.xml 配置正确。

导入证书时没有错误消息,并且根据 keytool 检查,一切似乎都使用 CA 证书正确配置。在服务器启动期间没有给出任何错误消息来指示处理证书的任何问题。

关于带有 CA 证书的密钥库,我是否应该更仔细地查看可能导致完全拒绝客户端您好?不同的密钥库或 CA 证书将如何影响握手的最早步骤?

感谢您提供的信息。

【问题讨论】:

  • 假设“keytool”表示 Java,这种行为是典型的“keystore”文件,实际上不包含密钥。当您说密钥库“具有 CA 签名的证书”时,它是否在同一条目中具有 CA 签名的证书,类型为 privateKey,用于生成证书请求 (CSR)?此外,今天所有公共 CA 颁发的证书至少需要一个“链”或“中间”证书(有时更多),并且您也必须拥有它(尽管它/它们可以从不同类型的 trustCert 条目开始) .

标签: ssl


【解决方案1】:

我假设您正在谈论服务器端证书和服务器端密钥存储,因为错误发生在尚未涉及客户端证书的状态。如果服务器能够将自签名证书发送给客户端,但无法将 CA 签名证书发送给客户端,那么您尝试发送的证书一定有问题,或者证书无法发送与客户端提供的密码一起使用。

由于问题显然出在服务器端,您应该首先检查服务器端写入的所有日志,以获取可能出现的错误提示。典型的问题是不存在的文件、错误的文件、受密码保护的客户端密钥(不提供密码)或密钥不属于证书。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2015-04-06
    • 2017-12-11
    • 2016-01-18
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多