Linux 上的 SSL_CERT_DIR 和 SSL_CERT_FILE openssl 环境变量

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

我的 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:证书验证失败]。

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

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

ssl openssl miniconda
2个回答
2
投票

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

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

[HASH].0

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

openssl x509 -subject_hash -in root.cer

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


0
投票

因为你需要运行

c_rehash
openssl
知道在哪里可以找到该文件:

SSL_CERT_DIR=$(pwd) c_rehash
SSL_CERT_DIR=$(pwd) openssl s_client -verify_return_error -connect localhost:443 < /dev/null
© www.soinside.com 2019 - 2024. All rights reserved.