Centos 7にアップグレードした後にlwpリクエストが失敗する

Centos 7にアップグレードした後にlwpリクエストが失敗する

lwp-requestを含むcentos 6でうまく動作するbashスクリプトがあります。システムをCentos 7にアップグレードしましたが、要求は機能しません。

# lwp-request -E https://localhost/admin/startup
GET https://localhost/admin/startup
User-Agent: lwp-request/6.03 libwww-perl/6.05

500 Can't connect to localhost:443
Content-Type: text/plain
Client-Date: Sun, 25 Jan 2015 10:24:22 GMT
Client-Warning: Internal response

Can't connect to localhost:443

ブラウザを介してそのURLにアクセスできることを確認しました。
私の仮定は、これがperl-libraries-updateの問題であるということです。
lwp-requestを使用するSSL / TLSネットワーキングにはどのPerlライブラリが必要ですか?
または、次のライブラリで行われた変更は次のとおりです。

perl-libwww-perl
perl-Crypt-SSLeay

気づく
Centos 7では、関連性のある次のような新しいライブラリをインストールしました。

perl-Net-SSLeay
perl-IO-Socket-SSL

ベストアンサー1

IO::Socket::SSL は証明書の名前が接続しようとしている名前と一致することを確認しますが、Crypt::SSLeay はそうではありません。デフォルトでは、最新のLWPも証明書チェーンを確認しますが、おそらくこれを実行できる古いLWPバージョンを使用している可能性があります。

SSLデバッグを使用してプログラムを呼び出して、問題の実際の原因を特定することをお勧めします。

perl -MIO::Socket::SSL=debug4 program.pl

ssl_optsその後、実行するチェックを制御できます。perldoc IO::Socket::SSLオプションの詳細についてはこちらをご覧ください。

  • SSL_ca_file自己署名証明書を使用している場合、または証明書が普遍的に信頼できるルートCAによって発行されていない場合に使用します。
  • SSL_verifycn_name証明書に含める必要がある名前を設定するために使用されます。つまり、www.example.com証明書に名前があるがlocalhostホストに接続する場合は設定する必要があります。SSL_verifycn_name => 'www.example.com'
  • または、SSL_fingerprint証明書の指紋を確認し、他の確認を無効にすることもできます。
  • 最後に、を使用してすべての種類の検証を無効にできますSSL_verify_mode。ただし、これは回避策にすぎず、中間者攻撃に対して脆弱になるため、本番コードではこれを行うべきではありません。

ssl_opts は直接設定できないので、lwp-request次のような小さなプログラムを使用することをお勧めします。

  use LWP::UserAgent;
  my $ua = LWP::UserAgent->new( ssl_opts => { 
      SSL_ca_file => 'myca.pem',
      SSL_verifycn_name => 'www.example.com',
  });
  print $ua->get('https://...')->as_string;

おすすめ記事