【问题标题】:SSL Handshake Failing With 'Certificate Unknown'SSL 握手失败并显示“证书未知”
【发布时间】:2018-01-12 14:22:59
【问题描述】:

我们有一个当前通过 HTTP 协议运行的应用程序。我们的目标是将其迁移到 HTTPS。我们已经进行了必要的更改,但在登录应用程序期间,我收到“peer not authenticated”错误消息。

我是 SSL 世界的新手,所以我用谷歌搜索并捕获了 Wireshark 跟踪,通信如下所示:

  1. 客户端向服务器发送 [SYN]。
  2. 服务器向客户端发送 [SYN,ACK]。
  3. 客户端向服务器发送 [ACK]。
  4. 客户端向服务器发送消息ClientHello
  5. 服务器发送ServerHello 然后它的证书和消息“ServerHello, Certificate, ServerHelloDone
  6. 警报 61,致命级别,描述:证书未知 // 此处失败。

请就可能出现的问题分享您的意见。我们被困在这里,无法继续前进。

【问题讨论】:

  • 请添加wireshark跟踪的截图,以便我们知道警报来自哪里(客户端或服务器)。
  • 听起来客户端无法验证服务器的证书,可能是因为客户端不知道或不信任用于签署服务器证书的根证书颁发机构。客户端必须知道根权限,否则客户端需要禁用证书验证(这对安全性不利)。
  • 如果我将服务器安全证书导入客户端,我们会看到此问题得到解决。我们对三个不同的客户进行了尝试。这有什么意思吗?为什么要在客户端安装属于服务器的证书?
  • @PavanDittakavi 这意味着它必须是自签名的,这意味着除非通过该导入过程明确配置为这样做,否则没有人会信任它。最好的解决方案是让 CA 签署。

标签: ssl https tcp x509certificate handshake


【解决方案1】:

更新

这是一个奇怪的错误。 Certificate Unknown 通常应伴随 46 而不是 61Alert 代码。

如果您看到,Alert Protocol (RFC 5246)

中没有提到 SSL 警报 61
  enum {
      close_notify(0),
      unexpected_message(10),
      bad_record_mac(20),
      decryption_failed_RESERVED(21),
      record_overflow(22),
      decompression_failure(30),
      handshake_failure(40),
      no_certificate_RESERVED(41),
      bad_certificate(42),
      unsupported_certificate(43),
      certificate_revoked(44),
      certificate_expired(45),
      certificate_unknown(46),
      illegal_parameter(47),
      unknown_ca(48),
      access_denied(49),
      decode_error(50),
      decrypt_error(51),
      export_restriction_RESERVED(60),
      protocol_version(70),
      insufficient_security(71),
      internal_error(80),
      user_canceled(90),
      no_renegotiation(100),
      unsupported_extension(110),
      (255)
  } AlertDescription;

不查看痕迹,很难进一步调查。

Server Hello 中提供的 Server 证书 似乎不受客户端信任。

我建议使用 cURL.exe-v 选项对此进行测试。

【讨论】:

  • 未能提供客户端证书并不是 TLS 中的真正错误,这里也没有发生:服务器只获得了 ServerHelloDone。如果服务器“需要”一个客户端证书但没有得到它,它要么继续要么发送一个 handshake_failure 警报。客户端发送不受信任的证书或错误类型之一是违反 TLS 协议的。
  • 是的,这里好像没有发生过。但是,未能提供客户端证书可能会导致握手失败。这又取决于,目前我还没有看到网络跟踪来确定发生了什么。 61也不是我所期望的。但是我会编辑帖子以删除它以避免混淆。
  • 如果我将服务器安全证书导入客户端,我们会看到此问题得到解决。我们对三个不同的客户进行了尝试。这有什么意思吗?为什么要在客户端安装属于服务器的证书?
  • 那是自签名证书吗?颁发服务器证书的 CA 是否安装在客户端 CA 证书存储中?
  • 所以这意味着这是一个证书信任问题。
猜你喜欢
  • 2019-12-06
  • 2016-05-04
  • 2016-01-18
  • 2018-05-15
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
相关资源
最近更新 更多