2016-07-22 9 views
1

Ich würde gerne die SSL_ca_path SSL-Option verwenden, da es zuverlässiger ist. Das Problem, dass es die Zertifikate in dem angegebenen Verzeichnis nicht verwendet.SSL_ca_path mit IO :: Socket :: SSL verwendet keine Zertifikate im Verzeichnis

Dieser Code funktioniert:

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/", 
    }); 

Aber mit SSL_ca_path statt SSL_ca_file bricht das Skript.

Nicht

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/", 
    }); 

Weder Umbenennung der Zertifikate *.pem noch Entfernen der hinteren / im Pfad behebt das Problem zu arbeiten.

Berechtigungen und Eigentümer des Verzeichnisses und Dateien gleich sind (770)

komplette Skript: https://github.com/Benedikt1992/nagios-jenkins-plugin/blob/master/check_jenkins_job_extended.pl#L71-L75

Antwort

3

Ein Zertifikatsverzeichnis für die Verwendung mit OpenSSL (die die TLS-Implementierung von IO :: Socket verwendet wird: : SSL) müssen eine spezifische Struktur haben, bei der die Dateinamen auf Hashes des Zertifikats basieren. Das bedeutet, dass es nicht ausreicht, nur die Zertifikate im Verzeichnis zu löschen.

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 für weitere Informationen und beachten Sie, dass die Berechnung des Hash für den Namen verwendet werden, kann für verschiedene Versionen unterschiedlich sein von:

Zum Beispiel finden Sie die folgende Struktur (von Ubuntu /etc/ssl/certs genommen) OpenSSL.