SSL 警报编号 48:未知 CA,即使 openssl verify 返回 OK

Yas*_*ass 5 ssl ca haproxy client-certificates

我在 haproxy 上面临 TLS 双重身份验证的问题,我的根 CA 和中间 CA 一次连接在一起,我的客户端证书正常,并且 openssl 验证返回 OK(根据 CA 验证客户端证书)

openssl verify -CAfile ca_cert.pem clientcert.crt
OK
Run Code Online (Sandbox Code Playgroud)

我在 haproxy 上的配置:

frontend myfront_77
  bind myip:myport ssl crt /etc/haproxy/ssl/servercert.pem ca-file /etc/haproxy/ssl/ca_cert.pem force-tlsv12 ciphers AES256+EECDH:AES256+EDH:AES256-GCM-SHA384:AES128-GCM-SHA256:AES128-SHA256:AES256-SHA verify required
Run Code Online (Sandbox Code Playgroud)

但是当发送请求时我遇到了这个 ssl 错误:

SSL_connect:error in SSLv3 read finished A SSL3 alert read:fatal:unknown CA SSL_connect:failed in SSLv3 read finished A 140080046843792:error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca:s3_pkt.c:1493:SSL alert number 48
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮忙吗,我几天来一直被这个问题搞得心烦意乱?

小智 0

首先我要说的是,我从未使用过 haproxy,但这个问题是大约 4 年前提出的,现在有 4K 视图,没有答案,所以这是我使用 Dovecot 和 Thunderbird 时遇到完全相同错误的经验。

Thunderbird 和 Firefox 不使用系统信任存储。我认为这对于更多的平台来说是常见的。

openssl verify使用、 或验证证书后openssl s_client,您应该在客户端程序中检查根 CA 证书。在 mozilla 程序中,可以在 about:preferences#privacy > 查看证书... 中完成此操作

就我而言,我有一个过时的证书,因此请确保查看详细信息,或者更好的是,验证客户端程序中的根 CA 是否与 openssl 正在验证的根 CA 相匹配。在这种情况下,一个简单的差异就可以工作。

有时,根据私钥验证证书可能会有所帮助,这可以通过比较公钥来完成。 openssl pkey -in key.pem -pubout | diff - <(openssl x509 -in cert.pem -pubkey -noout)

Mozilla 侧边栏,我不推荐这样做,因为它会重复一堆证书。也可以让 Thunderbird/Firefox 查看系统信任存储,方法是转到 about:preferences#privacy > 安全设备... > 加载,然后导航到 p11-kit-trust.so。例如/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so
https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox

Dovecot 项目有一个很好的测试文章,用于检查是否存在服务器或客户端问题。
https://wiki2.dovecot.org/TestInstallation
https://doc.dovecot.org/configuration_manual/dovecot_ssl_configuration/#testing

然而,自从引入 keyUsage 约束以来,这还不是全部。客户端可能会强制执行此操作,从而导致类似的错误:“sslv3 警报错误证书:SSL 警报编号 42”
https://bugzilla.mozilla.org/show_bug.cgi?id=1036338

我发现以下内容是一篇很好的文章,包括创建根/中间/客户端证书链文件和约束。 https://jamielinux.com/docs/openssl-certificate-authority/create-the-root-pair.html