SSL_ca_path 和 IO::Socket::SSL 不使用目录中的证书
SSL_ca_path with IO::Socket::SSL doesn't use certs in directory
我想使用 SSL_ca_path
ssl 选项,因为它更可靠。它不使用给定目录中的证书的问题。
此代码有效:
local $NET::HTTPS::SSL_SOCKET_CLASS = 'IO::Socket::SSL';
my $ua = LWP::UserAgent->new(ssl_opts => {
SSL_ca_file => "/etc/pki/tls/certs/ca-bundle.crt",
# SSL_ca_path => "/etc/pki/tls/certs/",
});
但是使用 SSL_ca_path
而不是 SSL_ca_file
会破坏脚本。
不工作
local $NET::HTTPS::SSL_SOCKET_CLASS = 'IO::Socket::SSL';
my $ua = LWP::UserAgent->new(ssl_opts => {
# SSL_ca_file => "/etc/pki/tls/certs/ca-bundle.crt",
SSL_ca_path => "/etc/pki/tls/certs/",
});
将证书重命名为 *.pem
或删除路径中尾随的 /
都无法解决问题。
目录和文件的权限和所有者相同(770)
与 OpenSSL(IO::Socket::SSL 使用的 TLS 实现)一起使用的证书目录需要具有特定结构,其中文件名基于证书主题的哈希值。这意味着仅仅将证书放在目录中是不够的。
例如,您会发现以下结构(取自 Ubuntu /etc/ssl/certs
):
lrwxrwxrwx 1 root root 41 Feb 25 10:19 f30dd6ad.0 -> USERTrust_ECC_Certification_Authority.pem
lrwxrwxrwx 1 root root 34 Feb 25 10:19 f3377b1b.0 -> Security_Communication_Root_CA.pem
可以使用 OpenSSL rehash or c_rehash 命令创建此目录结构。该命令创建以散列开头的符号链接(在某些版本的 OpenSSL 中,可以使用 openssl x509 -noout -hash -in <certfile>
计算)后跟句号和数字(以 .0
开头,并使用 .1
、.2
、.3
等(如果多个证书具有相同的哈希值)。 注意:对于不同版本的 OpenSSL,名称的哈希计算可能不同。
我想使用 SSL_ca_path
ssl 选项,因为它更可靠。它不使用给定目录中的证书的问题。
此代码有效:
local $NET::HTTPS::SSL_SOCKET_CLASS = 'IO::Socket::SSL';
my $ua = LWP::UserAgent->new(ssl_opts => {
SSL_ca_file => "/etc/pki/tls/certs/ca-bundle.crt",
# SSL_ca_path => "/etc/pki/tls/certs/",
});
但是使用 SSL_ca_path
而不是 SSL_ca_file
会破坏脚本。
不工作
local $NET::HTTPS::SSL_SOCKET_CLASS = 'IO::Socket::SSL';
my $ua = LWP::UserAgent->new(ssl_opts => {
# SSL_ca_file => "/etc/pki/tls/certs/ca-bundle.crt",
SSL_ca_path => "/etc/pki/tls/certs/",
});
将证书重命名为 *.pem
或删除路径中尾随的 /
都无法解决问题。
目录和文件的权限和所有者相同(770)
与 OpenSSL(IO::Socket::SSL 使用的 TLS 实现)一起使用的证书目录需要具有特定结构,其中文件名基于证书主题的哈希值。这意味着仅仅将证书放在目录中是不够的。
例如,您会发现以下结构(取自 Ubuntu /etc/ssl/certs
):
lrwxrwxrwx 1 root root 41 Feb 25 10:19 f30dd6ad.0 -> USERTrust_ECC_Certification_Authority.pem
lrwxrwxrwx 1 root root 34 Feb 25 10:19 f3377b1b.0 -> Security_Communication_Root_CA.pem
可以使用 OpenSSL rehash or c_rehash 命令创建此目录结构。该命令创建以散列开头的符号链接(在某些版本的 OpenSSL 中,可以使用 openssl x509 -noout -hash -in <certfile>
计算)后跟句号和数字(以 .0
开头,并使用 .1
、.2
、.3
等(如果多个证书具有相同的哈希值)。 注意:对于不同版本的 OpenSSL,名称的哈希计算可能不同。