【问题标题】:Installing a new ca certificate for Perl 5.14.2 LWP on Ubuntu 12.04在 Ubuntu 12.04 上为 Perl 5.14.2 LWP 安装新的 ca 证书
【发布时间】:2013-10-23 17:40:21
【问题描述】:

我在尝试使用 LWP 连接到特定 https 网站时遇到以下错误:

LWP::Protocol::https::Socket: SSL connect attempt failed with unknown errorerror:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at /usr/local/share/perl/5.14.2/LWP/Protocol/http.pm line 51.

我尝试使用 wget 并得到:

ERROR: cannot verify [domain]'s certificate, issued by `/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=********':
  Unable to locally verify the issuer's authority.

我搜索了一下,发现我可能必须安装 godaddy root ca 证书。我想出了如何做到这一点(下载证书,放入 /usr/share/ca-certificates 并运行 update-ca-certificates)。过程中我也学会了如何使用openssl s_client。

现在证书已安装,wget 可以工作,但 LWP 仍然失败并出现同样的错误,openssl s_client 也是如此:

# openssl s_client -connect [domain]:443
CONNECTED(00000003)
depth=0 O = [domain], OU = Domain Control Validated, CN = [domain]
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 O = [domain], OU = Domain Control Validated, CN = [domain]
verify error:num=27:certificate not trusted
verify return:1
depth=0 O = [domain], OU = Domain Control Validated, CN = [domain]
verify error:num=21:unable to verify the first certificate
verify return:1

我不知道下一步该去哪里让它工作。有什么建议吗?


编辑: 已解决这是一个简单的脚本,描述了 mikew 的建议后的工作原理:

#!/usr/bin/perl
use LWP::UserAgent;
$URL="[domain]";
my $ua = LWP::UserAgent->new(ssl_opts => { SSL_ca_path=>'/etc/ssl/certs'});
my $response = $ua->get($URL);

【问题讨论】:

    标签: perl ssl ubuntu-12.04 lwp


    【解决方案1】:

    要获得更具体的答案,我们需要知道您是如何实例化 LWP 对象的。

    但您可能需要了解的是 LWP 构造函数中 ssl_optsSSL_ca_fileSSL_ca_path 选项。如果没有这些集合之一,则假定 Mozilla_CA 是用于验证网站的 CA。

    LWP::Protocol::https 以及LWP::UserAgentssl_opts 构造函数选项。

    如果您使用的是 lwp-download 之类的东西,但实际上并没有自己实例化 LWP::UserAgent 对象,那么您需要将 PERL_LWP_SSL_CA_FILE 环境变量设置为指向您的证书颁发机构或将 PERL_LWP_SSL_CA_PATH 设置为您的 CA 路径.你也可以只设置这些而不是传递给ssl_opts

    如果你不是特别担心做所有这些验证并且喜欢危险地生活,你可以将verify_hostname => 0设置为ssl_opts或将PERL_LWP_VERIFY_HOSTNAME环境变量设置为0。

    如文档中所述,LWP 5.837 及更早版本默认关闭verify_hostname,而更高版本默认为开启

    【讨论】:

    • 很高兴听到!编辑答案以澄清只需要 SSL_ca_file 或 SSL_ca_path 之一。
    猜你喜欢
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 2014-08-12
    • 2012-12-10
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多