Ich portiere eine Anwendung von PHP/CURL zu Perl und LWP :: UserAgent. Ich muss eine POST-Anfrage an einen Webserver stellen und ein Client-Zertifikat und eine Schlüsseldatei bereitstellen. Der PHP-Code, den ich versuche zu replizieren diese:Verwendung von LWP mit SSL und Client-Zertifikaten
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSLCERT, "/path/to/certificate.pem");
curl_setopt($ch, CURLOPT_SSLKEY, "/path/to/private.key");
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, "secretpassword");
Und hier ist mein Perl-Code:
my $ua = LWP::UserAgent->new();
$ua->ssl_opts(
SSL_verify_mode => 0,
SSL_cert_file => '/path/to/certificate.pem',
SSL_key_file => "/path/to/private.key",
SSL_passwd_cb => sub { return "secretpassword"; }
);
Der PHP-Code erfolgreich eine Verbindung mit dem Server, aber der Perl-Code nicht mit:
SSL Lesefehler Fehler: 14094410: SSL Routinen: SSL3_READ_BYTES: sslv3 Alarm Handshake Fehler
Ich kann nicht herausfinden, was ich vermisse.
Sind die 'private.key' (PHP) und' private.pem' (Perl) ein Tippfehler oder ein Teil der Portierung? – amon
Das Übergeben mehrerer Argumente an [ssl_opts] (https://metacpan.org/module/LWP::UserAgent#ATTRIBUTES) ist nicht dokumentiert. Um sicherzugehen, rufen Sie ssl_opts mehrmals auf oder übergeben Sie sie an den Konstruktor. Ich denke, es funktioniert, aber besser sicher. Sie könnten es auch als Fehler/fehlende Funktion melden (https://rt.cpan.org/Public/Bug/Report.html?Queue=libwww-perl). – Schwern
Das war nur ein Tippfehler, als ich meinen Code verdunkelte. Es sollte private.key für beide sein. Danke fürs merken, aber das ist nicht das Problem. Brauchst du noch immer Hilfe! :) – kent