SSL 警报编号 48:未知 CA,即使使用 openssl 验证也返回 OK

问题描述 投票:0回答:1

大家好:)我在 haproxy 上面临 ssl 双重身份验证的问题,我的根 CA 和中间 CA 一次包含在一起,我的客户端证书正常,openssl 验证返回 OK(根据 CA 验证客户端证书)

openssl verify -CAfile ca_cert.pem clientcert.crt
OK

我在 haproxy 上的配置:

前端 myfront_77 绑定 myip:myport ssl crt /etc/haproxy/ssl/servercert.pem ca 文件 /etc/haproxy/ssl/ca_cert.pem 强制 tlsv12 密码 AES256+EECDH:AES256+EDH:AES256-GCM-SHA384:AES128-GCM-SHA256:AES128-SHA256:AES256-SHA 需要验证

但是发送请求时出现此 ssl 错误:

SSL_connect:SSLv3 读取完成时出错 SSL3 警报 读取:致命:未知 CA SSL_connect:SSLv3 中失败读取完成 A 140080046843792:错误:14094418:SSL例程:ssl3_read_bytes:tlsv1 警报未知 ca:s3_pkt.c:1493:SSL 警报编号 48

任何人都可以帮忙吗,我已经被这个问题弄坏了好几天了?

谢谢你

ssl haproxy client-certificates ca
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.