gpt4 book ai didi

ssl - Openssl 验证链式 CA 和链式证书

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:12 25 4
gpt4 key购买 nike

我有一个证书链: root CA -> intermediate CA -> org CA -> client Cert

当我用 CA 验证客户端证书时 root CA -> intermediate CA -> org CA , 它有效:

$ cat org_1_ca/ca_crt.pem intermediate_ca/ca_crt.pem root_ca/ca_crt.pem > /tmp/test123.pem
$ openssl verify -CAfile /tmp/test123.pem client/client_crt.pem
client_crt.pem: OK

但是当我将我的客户端证书与 org CA ( org CA -> client Cert ) 链接起来,并将链的其余部分作为 CA ( root CA -> intermediate CA ) 时,它不会:

$ cat intermediate_ca/ca_crt.pem root_ca/ca_crt.pem > /tmp/test12.pem
$ openssl verify -CAfile /tmp/test12.pem client/org1_client_crt.pem
client/org1_client_crt.pem: C = US, ST = CA, L = LA, O = PP, OU = TEST, CN = user
error 20 at 0 depth lookup:unable to get local issuer certificate

这是根本错误还是 openssl verify不喜欢吗?我用 nginx 和 openssl connect 尝试了同样的事情那里没有运气。感谢您的帮助。

最佳答案

openssl 命令行verify 操作只读取一个证书,第一个,来自作为操作数给出的文件,或者如果给出了不止一个。这不同于使用 -CAfile -trusted -untrusted 选项指定的文件,后者可以(并且通常确实)包含多个证书。

您的文件 client/org1_client_crt.pem 可能按顺序包含客户端证书和“org CA”证书。仅使用客户端证书,忽略“org CA”证书,因此您没有要验证的有效链。

如果您想使用命令行来模拟/测试接收器(对于客户端证书,服务器)将执行的验证,请提供叶证书作为操作数和所有其他传输的(链)证书 -不可信,以及 anchor 加上信任库中的任何“已知”中间体,无论是显式的还是默认的。

没有openssl connect操作;我假设您的意思是 openssl s_client 带有包括 -connect 在内的选项,因为这是使用客户端证书链的一个地方。 s_client-cert 选项同样只使用文件中的第一个证书。除了最新版本 1.1.0 外,命令行上没有指定客户端链的选项,即使在该版本中也没有记录,因此您必须仔细阅读帮助消息或代码,尽管 API/库已经很长时间了支持您自己编写的代码。

通过 1.0.2 如果你想发送一个完整链的客户端证书到服务器(你应该按照 RFCs),假设服务器请求客户端身份验证,这不是通常的,也不是 nginx 的默认(以及其他) ,你必须使用一个技巧:在 truststore 中提供客户端链所需的所有证书,此外验证服务器所需的 anchor ,要么明确使用 -CAfile 和/或 -CApath,或使用(如果需要修改)默认信任库,除非您的 openssl 是较旧的非 RedHat默认信任库仅在 s_client s_server s_time 中不起作用的版本。

s_server 中的服务器证书/链也是如此,只是它几乎总是被使用,而不是很少被使用。

关于ssl - Openssl 验证链式 CA 和链式证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44375300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com