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;