SSL 握手失败,出现 'Certificate Unknown'

标签 ssl https tcp x509certificate handshake

我们有一个当前通过 HTTP 协议(protocol)运行的应用程序。我们的目标是将其迁移到 HTTPS。我们已经进行了必要的更改,但是在登录应用程序期间我收到了“对等未经过身份验证”的错误消息。

我对 SSL 世界完全陌生,所以我用谷歌搜索并捕获了 Wireshark 跟踪,通信如下所示:

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

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

最佳答案

已更新

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

如果您看到,Alert Protocol (RFC 5246) 中没有提到 SSL Alert 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 certificate 没有被客户端信任。

我建议使用带有 -v 选项的 cURL.exe 进行测试。

关于SSL 握手失败,出现 'Certificate Unknown',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45510308/

相关文章:

iphone - 如何在 iphone 中列出我的 wifi 范围内的所有设备

java - 套接字 IO - 如何配置和连接到安全域上的 netty 套接字 io 服务器

apache - Laravel 使用 Mod_rewrite 强制 HTTPS

java - 在 web.xml 中切换 <secure> true 或 false 的最快方法

http - 在什么情况下我的浏览器会尝试为多个请求重新使用 TCP 连接?

windows - Windows 服务器上允许的理论最大打开 TCP 连接数是多少

ssl - 在 JAVA 中发出 HTTPS 请求并打开 SSL 套接字

ssl - 在 JBoss 上安装 SSL 证书

android - 在 Android App 中信任自签名证书

PHP cURL 在发送数据后提供 SSL 错误?