2017-02-17 5 views
0

sslを使用してWebサービスを呼び出そうとしています。次のエラーが表示されます:Perl WebサービスSSLネゴシエーションの失敗

500 SSL negotiation failed:

私はフォーラムを検索し、提供された方法を適用しましたが、いずれも機能しませんでした。 Iが適用

2つの方法を以下に列挙する:

1-)呼び出しの前的環境を設定:

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;

2-)通過パラメータssl_opts => [SSL_verify_mode => 0]プロキシへ:

my $soap = SOAP::Lite  
    -> on_action(....) 
    -> uri($uri) 
    -> proxy($proxy, ssl_opts => [ SSL_verify_mode => 0 ])  
    -> ns("http://schemas.xmlsoap.org/soap/envelope/","soapenv") 
    -> ns("http://tempuri.org/","tem"); 
$soap->serializer()->encodingStyle(undef); 

解決方法はありますか?

+0

'perl -MIO :: Socket :: SSL = debug4 program.pl'でコードを実行し、問題のデバッグに役立つ情報が含まれている可能性があるので、出力を質問に追加してください。それ以外にssl_optsはおそらくハッシュリファレンスであり、あなたの場合のような配列リファレンスではないはずです。 –

+0

'openssl s_client -connect host:port'で指定のサーバに接続するとどうなりますか? – jcaron

+0

また、あなたが引用したエラーの終わりのコロンは、それ以降はそれがあると私に信じさせます。 – jcaron

答えて

3

... Connection reset by peer at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/Net‌​/SSL.pm line 145

あなたはSSLライブラリ(代わりに、IOのすなわち墓所:: SSLeayの::ソケット:: SSL)の古いバージョンと一緒に(2004年)のPerlの非常に古いバージョンを実行しているし、私の推測では、ということですこれは、TLSサポートのためのOpenSSLライブラリの非常に古いバージョンを使用することと一緒になります。この組み合わせは、SNIのサポートがなく、TLS 1.2のサポートがなく、ECDHE暗号のサポートがないことを意味します。現代のサーバーの多くは、これらのうち少なくとも1つをサポートする必要があります。しかし、connection reset by peerは、一部のファイアウォールが接続をブロックしているか、指定したエンドポイントでリッスンしているサーバーがないことを意味する可能性があります。または、サーバーがクライアント証明書で認証することを期待している可能性があります。伝えるのは難しいですが、接続のパケットキャプチャでは、より多くの情報を提供するかもしれません。また、URLが一般に公開されていれば、問題のデバッグにも役立ちます。

関連する問題