错误:500无法连接到example.com:443(证书验证失败)

时间:2013-10-16 07:18:23

标签: perl

我收到了这个错误。这是我的代码。

   use LWP::UserAgent;
    use HTTP::Request::Common qw(POST);
    use HTTP::Cookies;

$URL="https://example.com/my.plicy";
$UA = LWP::UserAgent->new();
$UA->ssl_opts( verify_hostnames => 0 ); 
#UA->ssl_opts( SSL_ca_file => Mozilla::CA::SSL_ca_file() );

$req =HTTP::Request::Common::POST("$URL",
   Content_type=>'form-data',
   Content =>[
         'username'=>'111',
         'password'=>'2222',
         'vhost'=>'standard'
   ]
);
$req->header('Cookie' =>q(TIN=287000; LastMRH_Session=439960f5; MRHSession=78c9c47291c1fcedae166121439960f5));


$resp=$UA->request($req);

if( ($resp->code() >= 200) && ($resp->code() <400) ) {
  print $resp->decoded_content;

}else{
  print "Error: ". $resp->status_line. "\n";
}

问题是我没有真正的证书可供提供,因为该网站处于开发阶段,并且使用了localhost的证书......浏览器无法识别它。

有没有办法绕过验证?并避免错误?

更新

我改变了我的代码。添加了另一个库并添加了此功能:

use CACertOrg::CA;

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;

$UA->ssl_opts(
    verify_hostnames => 0,
    SSL_ca_file      => CACertOrg::CA::SSL_ca_file()
);

现在我明白了:

  
     

为客户端使用SSL_VERIFY_NONE的默认SSL_verify_mode    已弃用!请将SSL_verify_mode设置为SSL_VERIFY_PEER    与SSL_ca_file | SSL_ca_path一起进行验证。    如果你真的不想验证证书并保留    请设置连接打开Man-In-The-Middle攻击    SSL_verify_mode显式为您的应用程序中的SSL_VERIFY_NONE。

     

at C:/Perl/lib/LWP/Protocol/http.pm第31行。

所以我将选项更改为:

    $UA->ssl_opts(
     SSL_verify_mode   => 'SSL_VERIFY_NONE',
    verify_hostnames => 0,
    SSL_ca_file      => CACertOrg::CA::SSL_ca_file()
);

我什么都没打印..虽然我没有收到错误..这是一个好兆头吗?

3 个答案:

答案 0 :(得分:14)

您需要在use ..部分之后添加此行:

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;

答案 1 :(得分:1)

试试这个

my $UA   = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0, } );

答案 2 :(得分:0)

在这里挖尸,但我处于同一位置,这是修复该问题所需要包括的内容;)

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
$ENV{PERL_LWP_SSL_CA_FILE} = "/path/to/your/cert.pem";

在使用自签名证书时,仅将verify_hostnames设置为0是不够的。