【发布时间】:2014-11-25 02:19:13
【问题描述】:
我有一个 Perl 脚本,它充当在同一域下运行的其他 Perl 脚本的 Web 服务。我最近为该域创建了一个新的 SSL 证书 (AlphaSSL) 并将其安装在服务器上,并且在使用 https 访问该站点时显示良好。
但是,现在当客户端脚本通过 LWP 使用 htttps 调用 Web 服务时,会发出以前没有的错误。调用 Web 服务的代码如下所示:
$useragent = LWP::UserAgent->new();
$useragent->agent("someagentid");
$postdata = {
'action' => $apiaction,
'xauth' => $REQUEST_AUTH_KEY,
};
$response = $useragent->post($BILLING_INFO_GATEWAY, $postdata);
帖子中的网关是 https: URL,指向在同一域下运行的 Web 服务脚本。
它产生的错误是:
500 Can't connect to xxxxx.com:443 (certificate verify failed)
Content-Type: text/plain
Client-Date: Tue, 25 Nov 2014 01:52:20 GMT Client-Warning: Internal response
Can't connect to xxxxx.com:443 (certificate verify failed)
LWP::Protocol::https::Socket: SSL connect attempt failed with unknown error
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify
failed at /usr/perl/lib/site_perl/5.10.1/LWP/Protocol/http.pm line 49.
如果我添加:
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
然后错误消失,但安全连接似乎不太安全。
我在我的服务器上找到了证书目录,它是 /ssl/certs/,其中有一个 .crt 文件,所以我尝试添加:
$ENV{HTTPS_CA_PATH} = '/ssl/certs';
但我仍然收到错误消息。我也试过了:
$ENV{HTTPS_CA_FILE} = '/ssl/certs/xxxxxxxxxx.cabundle';
将 CA 捆绑文件复制到同一文件夹后(之前没有捆绑文件)。 此文件夹包含一个 .crt 文件,该文件在通过 WHM/cPanel 安装证书后已经存在。)
我还尝试仅指定 HTTPS_CA_FILE 环境变量而不指定 HTTPS_CA_PATH 变量,但没有成功。错误仍然存在。
关于我在代码或服务器上可能缺少什么以允许脚本成功验证主机名的任何想法?这是一个运行 Linux 和 cPanel 的专用 Web 服务器。
谢谢!
【问题讨论】: