gpt4 book ai didi

openssl - 如何列出 OpenSSL 信任的证书?

转载 作者:行者123 更新时间:2023-12-02 07:06:10 27 4
gpt4 key购买 nike

据我了解,任何使用 X.509 证书的软件都可能有自己的基础来决定证书是否可信。

AFAIK OpenSSL 只是查阅列表(例如/etc/ssl/certs)并检查证书是否存在。

OpenSSL 有没有办法列出它信任的所有证书?我知道我可以自己查阅该文件(在我特定的 OpenSSL 安装中),但是有没有一种(与安装无关的)方法可以从 OpenSSL 本身获取可信列表?

最佳答案

AFAIK OpenSSL just consults a list (such as, for example, /etc/ssl/certs) and checks if the certificate is present there.

不,OpenSSL 默认情况下不信任任何内容。你必须指示它信任什么。甚至还有一个常见问题解答主题涵盖它:Why does <SSL program> fail with a certificate verify error? :

This problem is usually indicated by log messages saying something like "unable to get local issuer certificate" or "self signed certificate". When a certificate is verified its root CA must be "trusted" by OpenSSL this typically means that the CA certificate must be placed in a directory or file and the relevant program configured to read it. The OpenSSL program 'verify' behaves in a similar way and issues similar error messages: check the verify(1) program manual page for more information.

您还可以测试与 Google 的连接以了解 OpenSSL 的行为:

$ openssl s_client -connect google.com:443
CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
verify return:0
...
Start Time: 1407377002
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)

请注意,上述操作会失败,因为 OpenSSL 默认情况下信任GeoTrust Global CA。实际上,链条中还有另一个信任点,那就是Google Internet Authority G2

您可以通过告诉 OpenSSL 信任什么来解决这种情况。下面,我使用-CAfile选项 Google Internet Authority G2 :

$ openssl s_client -connect google.com:443 -CAfile google-ca.pem 
CONNECTED(00000003)
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = google.com
verify return:1
...
Start Time: 1407377196
Timeout : 300 (sec)
Verify return code: 0 (ok)

接下来,您可以像浏览器一样运行,方法是转到 cURL 和 download cacert.pem cacert.pem里面有很多 CA:

$ openssl s_client -connect google.com:443 -CAfile cacert.pem 
CONNECTED(00000003)
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = google.com
verify return:1
...
Start Time: 1407377356
Timeout : 300 (sec)
Verify return code: 0 (ok)

你的性能还不如拥有数百个 CA 和从属 CA 的浏览器那么糟糕,但你已经很接近了:

$ cat cacert.pem | grep -o "\-\-\-\-\-BEGIN" | wc -l
153
<小时/>

OpenSSL 安全模型与 Web 应用程序/浏览器安全模型相反,在 Web 应用程序/浏览器安全模型中,浏览器携带称为证书颁发机构 (CA) 的信任 anchor 或信任点列表。 注意:在此模型中,错误的 CA 可能会声称对某个站点进行了认证,而浏览器也不会更明智。

这种情况过去发生过,并且将来很可能会再次发生。有关 PKIX 有趣业务的详细历史,请参阅 CAcert's Risk History 。例如,您知道Google Internet Authority G2GeoTrust Global CA 对 Google 的网站进行认证。没有理由 Dutch CA called Diginotar声称对它们进行了认证,或 French Cyberdefense Agency声称对它们进行了认证。

与安全模型相关:网络应用程序/浏览器模型的另一个问题是您无法打包应用程序所需的一个信任 anchor 或 CA 并使用它(假设您有可信的分发 channel ) 。您的证书会被 CA Zoo 扔到一堆。其他人仍然可以声称对您的网站进行了认证,您也可以声称对其他网站进行了认证。

安全模型是网络应用程序被降级为低值(value)数据的原因之一。 Web 应用程序不应处理中等值(value)或高值(value)数据,因为我们无法放置所需的安全控制。

<小时/>

Is there a way for OpenSSL to list all certificates which it trusts?

不需要,因为列表有 0 个成员:)

<小时/>

另请参阅How to find out the path for openssl trusted certificate? .

关于openssl - 如何列出 OpenSSL 信任的证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25156180/

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