证书验证失败perl

时间:2019-09-10 23:40:37

标签: perl ssl-certificate lwp-useragent

我正在从cgi运行这段代码。应该在站点https://elibrary.ferc.gov/idmws/search/FercAdvSearch.asp中插入一些文本,然后返回响应页面并将链接下载到我的服务器上。这曾经运行,但现在却没有。我收到“证书验证失败”消息。我正在运行perl 5.18.2,并使用lwp :: UserAgent。 SSLlabs.com说该站点具有“链问题包含锚点”。我需要将证书之一下载到我的服务器上吗?

$q =~ s#\n#&#mg;

# Create a request
if( ! $acid ){
    print $query->start_html('Problems');
    print $query->h2('Request not processed.' . " No accession             number supplied" );
    print  $query->end_html;
}else{
#    my $req = HTTP::Request->new(POST => "https://elibrary.ferc.gov/idmws/search/advResults.asp");
    my $req = HTTP::Request->new(POST => "https://elibrary.ferc.gov/idmws/search/fercadvsearch.asp");
    $req->content_type('application/x-www-form-urlencoded');
    $req->content("$q");

    # Pass request to the user agent and get a response back
    my $res = $ua->request($req);

    #print "$q<br>\n";
    # Check the outcome of the response
    if ($res->is_success) {
        $html = $res->content;
        $html =~ s#=\s*'\.\./#='https://elibrary.ferc.gov/idmws/#g;
        # ACTION="advResults.asp"
        $html =~ s#ACTION="#ACTION="https://elibrary.ferc.gov/idmws/search/#g;
        $html =~ s#ACTION='#ACTION='https://elibrary.ferc.gov/idmws/search/#g;
        $html =~ s#HREF='intermediate.asp#HREF='https://elibrary.ferc.gov/idmws/search/intermediate.asp#gm;
        $html =~ s#HREF=(['"])([a-z,A-Z,0-9,-,_./]+).asp#HREF=${1}https://elibrary.ferc.gov/idmws/search/$2.asp#gmi;
        #<A href='intermediate.asp?link_info=yes&doclist=13518346'      target="_blank">INFO</A><BR><BR>
        print $html;
        print "($EndDate) ($StartDate)";
    }
    else {
        print "ERROR getting <A HREF='https://elibrary.ferc.gov/idmws/search/advResults.asp'>https://elibrary.ferc.gov/idmws/search/advResults.asp</a>" . $res->status_line. "\n";
    }
}

1 个答案:

答案 0 :(得分:1)

  

SSLlabs.com说该站点具有“链接问题包含锚点”。我需要将证书之一下载到我的服务器上吗?

尽管这是服务器的错误配置,只是服务器发送的证书中包含根证书(“锚定”)对验证而言不是问题。它将被简单地忽略。实际上,我在安装时使用当前的LWP和默认的根CA完全可以访问该站点。

  

这曾经运行,但现在却没有。我收到“证书验证失败”消息。

正如我所说,它可以在我的系统上正常运行。而且,尽管此服务器的配置很糟糕(grade F in the SSLLabs report),但是证书的配置以及对它们的验证都不是真正的问题。

因此,您的系统上所做的某些更改很有可能导致其不再信任必要的根CA(DigiCert全球根CA)。不幸的是,此配置不在您的代码之外,因此未知此处实际执行的操作。

但是要解决特定情况下的问题,您可以download the necessary root certificate,将其写入文件(如ca.pem),然后将此文件明确地指定为程序的根C​​A存储。

my $ua = LWP::UserAgent->new;
$ua->ssl_opts('SSL_ca_file' => 'ca.pem');