2016-07-22 69 views
1

我想使用SSL_ca_path ssl選項,因爲它更可靠。它不使用給定目錄中的證書的問題。帶IO :: Socket :: SSL的SSL_ca_path不使用目錄中的證書

此代碼:

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

回答

3

使用證書目錄與OpenSSL的(這是由IO ::插座使用TLS實現: :SSL)需要有一個特定的結構,其中文件名是基於證書主題的散列。這意味着僅將證書放入目錄是不夠的。

例如,你會發現下面的結構(取自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 

有關更多信息,請參見the openssl documentation並注意使用的名稱的哈希計算可以針對不同版本的不同OpenSSL的。