6

HTTPS サイトへの perl スクリーンスクレイパーに問題があります。デバッグでは、次を実行しました。

print $res->headers_as_string;

出力には、次の行があります。

Client-SSL-Warning: Peer certificate not verified

この証明書を自動的に受け入れる方法はありますか、それとも問題ではありませんか?

#!/usr/bin/perl 
use LWP::UserAgent; 
use Crypt::SSLeay::CTX; 
use Crypt::SSLeay::Conn; 
use Crypt::SSLeay::X509; 
use LWP::Simple qw(get);

my $ua  = LWP::UserAgent->new; 
my $req = HTTP::Request->new(GET => 'https://vzw-cat.sun4.lightsurf.net/vzwcampaignadmin/');
my $res = $ua->request($req);

print $res->headers_as_string;

出力:

Cache-Control: no-cache
Connection: close
Date: Tue, 01 Jun 2010 19:28:08 GMT
Pragma: No-cache
Server: Apache
Content-Type: text/html
Expires: Wed, 31 Dec 1969 16:00:00 PST
Client-Date: Tue, 01 Jun 2010 19:28:09 GMT
Client-Peer: 64.152.68.114:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /O=VeriSign Trust Network/OU=VeriSign, Inc./OU=VeriSign International Server CA - Class 3/OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign
Client-SSL-Cert-Subject: /C=US/ST=Massachusetts/L=Boston/O=verizon wireless/OU=TERMS OF USE AT WWW.VERISIGN.COM/RPA (C)00/CN=PSMSADMIN.VZW.COM
Client-SSL-Cipher: DHE-RSA-AES256-SHA
Client-SSL-Warning: Peer certificate not verified
Client-Transfer-Encoding: chunked
Link: <css/vtext_style.css>; rel="stylesheet"; type="text/css"
Set-Cookie: JSESSIONID=DE6C99EA2F3DD1D4DF31456B94F16C90.vz3; Path=/vzwcampaignadmin; Secure
Title: Verizon Wireless - Campaign Administrator

更新:追加しました

$ENV{HTTPS_CA_FILE}   = 'certs/PSMSADMIN.VZW.COM';
$ENV{HTTPS_CA_DIR}    = 'certs/';

以下に提案されているように。デバッグもオンにしました:

$ENV{HTTPS_DEBUG} = 1;

ここに私の出力があります:

SSL_connect:before/connect initialization
SSL_connect:SSLv3 write client hello A
SSL_connect:SSLv3 read server hello A
SSL3 alert write:fatal:bad certificate
SSL_connect:error in SSLv3 read server certificate B
SSL_connect:before/connect initialization
SSL_connect:SSLv2 write client hello A
SSL_connect:error in SSLv2 read server hello B
content: 500 SSL negotiation failed: error:1407E086:SSL routines:SSL2_SET_CERTIFICATE:certificate verify failed

私は失敗を無視しようとしますが、問題はそれが現在ページ上の唯一のものであるため、ログインフォームなどがないことです。

4

1 に答える 1

4

私が知る限り、これは単なる警告です。そのサイトの証明書はドメインと一致しないため、perlは(当然のことながら)それについて不平を言っています。このように実際にピア証明書の検証をオンにした場合:

# CA cert peer verification
$ENV{HTTPS_CA_FILE}   = 'certs/ca-bundle.crt';
$ENV{HTTPS_CA_DIR}    = 'certs/';

これを出力として取得します。

Content-Type: text/plain
Client-Date: Tue, 01 Jun 2010 19:32:51 GMT
Client-Warning: Internal response
500 SSL negotiation failed: error:1407E086:SSL
      routines:SSL2_SET_CERTIFICATE:certificate verify failed
Content-Type: text/plain
Client-Date: Tue, 01 Jun 2010 19:32:51 GMT
Client-Warning: Internal response

ピア検証が必要かどうかを返す(提供する)という名前get_peer_verifyのメソッドがあります。このメッセージを隠すために2001年頃に追加されたと思います。2002年のこのパッチは、ピア検証が望ましくない場合に警告をオフにすることを主張していますが、これまでに適用されたとは思いません。Net::SSLCrypt::SSLeay

つまり、検証を行うつもりでない限り、おそらく警告を無視することができます。検証を行う場合は、ルート証明書をとに追加しCA_DIRますCA_FILE。しかし、証明書のドメインがサーバーのドメインと一致しないため、これが役立つかどうかさえわかりません。

于 2010-06-01T19:44:19.173 に答える