我想使用 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选项,因为它更可靠。问题是它不使用给定目录中的证书。
此代码有效:
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
既不将证书重命名为/
也不删除路径中的尾随id total group_id
1897 738 1
2489 716 2
2325 715 3
1788 702 2
1707 699 3
2400 688 3
2668 682 2
1373 666 1
1494 666 1
1564 660 1
2699 659 1
1307 648 4
1720 645 4
2176 644 1
1454 644 4
2385 639 3
1001 634 2
2099 634 4
1006 632 1
2587 630 3
1955 624 3
1827 624 4
2505 623 4
2062 621 3
1003 618 1
2286 615 4
2722 609 4
可以解决问题。
目录和文件的权限和所有者是相同的(770)
答案 0 :(得分:5)
与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如果多个证书具有相同的哈希值,则为{},.1
,.2
等。 注意:对于不同版本的OpenSSL,名称哈希的计算可能会有所不同。