gpt4 book ai didi

perl - 带有 IO::Socket::SSL 的 SSL_ca_path 不使用目录中的证书

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:47 25 4
gpt4 key购买 nike

我想使用 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)

完整脚本:https://github.com/Benedikt1992/nagios-jenkins-plugin/blob/master/check_jenkins_job_extended.pl#L71-L75

最佳答案

与 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命令。该命令创建以哈希开头的符号链接(symbolic link)(在某些版本的 OpenSSL 中,可以使用 openssl x509 -noout -hash -in <certfile> 计算)后跟一个句点和一个数字(以 .0 开头,并使用 .1.2 , .3 等(如果多个证书具有相同的哈希值)。 注意:名称哈希的计算对于不同版本的 OpenSSL 可能不同。

关于perl - 带有 IO::Socket::SSL 的 SSL_ca_path 不使用目录中的证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38529918/

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