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

标签 ssl haproxy client-certificates ca

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

openssl verify -CAfile ca_cert.pem clientcert.crt
OK

我在 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



但是在发送请求时我有这个 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



任何人都可以帮忙吗,自从几天以来我一直在为这个问题而烦恼吗?

谢谢

最佳答案

首先让我说我从未使用过 haproxy,但这个问题是 4 年前提出的,现在有 4K View 没有答案,所以这是我使用 Dovecot 和 Thunderbird 遇到完全相同错误的经验。
在 Thunderbird 和 Firefox 中,不要使用系统信任存储。我认为这对于更多的平台来说是常见的。
使用 openssl verify 验证证书后, 或 openssl s_client , 您应该在客户端程序中检查根 CA 证书。
在 mozilla 程序中,这可以在 about:preferences#privacy > View Certificates... 中完成
就我而言,我有一个过时的证书,因此请务必查看详细信息,或者更好地验证客户端程序中的根 CA 是否与 openssl 正在验证的根 CA 匹配。在这种情况下,一个简单的差异将起作用。
有时,根据私钥验证证书可能会有所帮助,这可以通过比较公钥来完成。openssl pkey -in key.pem -pubout | diff - <(openssl x509 -in cert.pem -pubkey -noout)Mozilla Sidebar,我不推荐这个,因为它会复制一堆证书。也可以让 Thunderbird/Firefox 查看系统信任存储,方法是转到 about:preferences#privacy > Security Devices... > Load,然后导航到您的 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 alert bad certificate: SSL alert number 42”
https://bugzilla.mozilla.org/show_bug.cgi?id=1036338
我发现以下是一个很好的文章,包括创建根/中间/客户端证书链文件和约束。
https://jamielinux.com/docs/openssl-certificate-authority/create-the-root-pair.html

关于SSL 警报编号 48 : Unknown CA, 即使使用 openssl 验证返回 OK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51963699/

相关文章:

ssl - IIS 10 和 HTTP/2 - 需要客户端证书

scala - SSL 蓝眼睛

ruby-on-rails - 当我在非 SSL 上运行应用程序时, session 过期停止工作

postgresql - 如何使用 SSL/TLS 在 CircleCI 中运行 PostgreSQL?

docker - traefik 中的用户认证和动态路由

c# - Azure Functions 不断返回 'The credentials supplied to the package were not recognized'

ssl - 如果 header 存在,Nginx 设置 proxy_set_header

https - 具有多个https站点的HAproxy

kubernetes - 非云环境下 kubernetes 的负载均衡

java - 如何在使用 Netty 运行的 Jersey 中获取 SSL 信息(对等证书)?