Przekazuję aplikację z PHP/cURL do Perla i LWP :: UserAgent. Muszę wysłać żądanie POST do serwera WWW i dostarczyć certyfikat klienta i plik klucza. Kod PHP Próbuję replikować to:Używanie LWP z SSL i certyfikatami klienta
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");
A oto mój kod Perl:
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"; }
);
kod PHP z powodzeniem łączy się z serwerem, ale kod Perl nie powiedzie się z:
Błąd odczytu protokołu SSL: 14094410: Procedury SSL: SSL3_READ_BYTES: błąd uzgadniania alertu sslv3
Nie mogę ustalić, czego mi brakuje.
Czy 'private.key' (PHP) i' private.pem' (Perl) to literówka lub część portowania? – amon
Przekazywanie wielu argumentów do [ssl_opts] (https://metacpan.org/module/LWP::UserAgent#ATTRIBUTES) nie jest udokumentowane. Aby być bezpiecznym, wywołaj ssl_opts kilka razy lub przekaż je do konstruktora. Myślę, że to działa, ale lepiej bezpieczne. Możesz również [zgłosić to jako błąd/brakującą funkcję] (https://rt.cpan.org/Public/Bug/Report.html?Queue=libwww-perl). – Schwern
To był tylko literówka, kiedy zasłoniłem kod. Powinien to być private.key dla obu. Dzięki za uwagę, ale to nie problem. Nadal potrzebujesz pomocy! :) – kent