【问题标题】:Self-signed SSL cert works in IE & curl but no modern browsers自签名 SSL 证书适用于 IE 和 curl,但不适用于现代浏览器
【发布时间】:2020-09-21 18:51:40
【问题描述】:

我在使用自签名 SSL 证书时遇到了一个有点令人困惑的问题,Windows 认为该证书是有效的,但没有现代浏览器会接受。

证书存在于系统证书存储区(通过 MMC 中的证书管理单元访问)、个人和受信任的根证书颁发机构文件夹中,并标记为有效。

根据实用程序SSL Certificate Verifier,证书和证书链是有效的。

这是它的输出:

**************************************************************************
Processing 'localhost'
**************************************************************************
Scan started: 21-09-2020 13:43:33
Generating connection string...
Connection string is: https://localhost:14006/
Entering certificate validation callback function...
Server returned 1 certificates.
Entering server certificate chain validation function...
Leaf certificate issued to: E=REDACTED, CN=localhost, O=localhost, L=New York, S=NY, C=US
Found Subject Alternative Names extension in the certificate.
Fetching SAN values:
DNS Name=localhost
DNS Name=127.0.0.1
DNS Name=::1
IP Address=0000:0000:0000:0000:0000:0000:0000:0001
IP Address=127.0.0.1

Certificate chain successfully passed all checks.
Finished!
Scan ended: 21-09-2020 13:43:33

如果我尝试使用 Internet Explorer 或 curl 访问服务,我会从服务中得到预期的 200 结果。

但是,如果我尝试使用 Edge、Chrome、Opera 或 Firefox 访问该服务,我会收到 ERR_CONNECTION_RESET。在将证书添加到 Firefox 的证书存储区之前,我得到了 PR_CONNECT_RESET_ERROR,但现在它也抛出了 ERR_CONNECTION_RESET

我的系统上没有激活的代理或 VPN 或任何其他会干扰 Windows 网络的东西。我完全不知所措。这里到底发生了什么,我该如何解决?

【问题讨论】:

  • 连接重置由服务器完成,而证书检查由客户端完成。因此,您的问题与证书是否有效无关。
  • 感谢您的帮助,但 ERR_CONNECTION_RESET 是一个握手错误,不是由服务器抛出的。
  • ERR_CONNECTION_RESET 表示服务器已发送 TCP RST 数据包。这不是握手错误,但会导致握手错误 - 如果 TLS 握手甚至已经开始。但这与客户端验证服务器证书有问题无关。
  • 那为什么在 curl 和 IE 下可以正常工作,而在其他浏览器上不行?
  • 我在 IIS 中尝试使用完全不同的自签名证书并且遇到了同样的问题。适用于 curl 和 IE,仅此而已。

标签: windows google-chrome ssl https ssl-certificate


【解决方案1】:

我有完全相同的症状 - IE 和 curl 工作。 Chrome、Edge 和 Firefox 没有,都报告 ERR_CONNECTION_RESET。

最终它被固定在一个损坏的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002\Functions 密钥上。

nmap 报告了一个密码被破解时正在使用:

| ssl-enum-ciphers:
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A

用正确的值重新加载密钥:

| ssl-enum-ciphers:
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp384r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp384r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A

鉴于Chromium was reporting them as obsolete five years ago,可能的原因是缺少 GCM 密码。

【讨论】:

    【解决方案2】:

    我在 chrome 上遇到了类似的问题

    NET::ERR_CERT_COMMON_NAME_INVALID

    ,原来错误出在证书本身。

    尝试使用以下链接创建证书: SSL Certificate

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 2021-10-03
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多