SSL_CERT_DIR 和 SSL_CERT_FILE 在 Linux 上 openssl 环境变量

我的 Linux 机器在 /etc/pki/tls/certs/ca-bundle.crt 中有证书

我已经安装了 miniconda 并尝试使用它的 urllib.request 包。

import urllib.request
r = urllib.request("https://example.com")

根据 openssl 文档,如果我将 SSL_CERT_DIR 设置为“/etc/pki/tls/certs”,openssl 应该选择 ca-bundle.crt 文件。但相反我收到错误 [SSL: CERTIFICATE_VERIFY_FAILED]。

当我将变量 SSL_CERT_FILE 设置为“/etc/pki/tls/certs/ca-bundle.crt”时,一切正常。

为什么设置 SSl_CERT_DIR 不起作用?根据文档,它应该可以工作。

stack overflow SSL_CERT_DIR and SSL_CERT_FILE openssl env variable on Linux
原文答案

答案:

作者头像

您对 SSL_CERT_DIR 环境变量的理解是正确的。变量中指定的目录适用于受信任的根证书(但不适用于中间证书!)。

将根证书复制到此目录时,它们必须遵循特定的命名约定。证书应为常规 PEM 格式,但文件名必须命名

[HASH].0

其中 [HASH] 是证书主题的哈希值。您可以使用以下命令找出此哈希值(将 root.cer 替换为您的根证书的文件名)

openssl x509 -subject_hash -in root.cer

免责声明:我在为 Windows 编译的 openssl 的 Windows 机器上对此进行了测试。我不必像在 openssl verify 的联机帮助页中提到的那样创建符号链接。