Apache使用ssl访问网站,证书看起来很好,但是我无法让它与perl/cgi一起工作。我得到以下错误:perl无法在linux上获得SSL套接字
LWP::Protocol::https::Socket: connect: Connection timed out at
/usr/local/share/perl5/LWP/Protocol/http.pm line 52.
的代码导致此错误:
my $useragent = LWP::UserAgent->new("local_address" => "$local_ip");
my $request = POST($post_url, $post_values);
my $reply_data = $useragent->request($request);
虽然我有和没有经过本地地址尝试过。我注意到LWP函数没有在调试时转储本地地址,所以我专门将它交给了它,但同样的问题发生在任何一种方式。
我一直在使用:
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
,我已经有和没有
use NET::SSL;
有和没有经过端口尝试这样的尝试:
@LWP::Protocol::https::EXTRA_SOCK_OPTS = (LocalAddr => '$local_ip',
#LocalPort => '443');
要使肯定perl看到的证书,我试过这个:
my $ua = LWP::UserAgent->new(
ssl_opts => {
#SSL_use_cert => 1,
#SSL_cert_file => "path-to-cert.crt",
#SSL_key_file => "path-to-key.key",
},
);
以及环境变量:
$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS}="IO::Socket::SSL";
$ENV{HTTPS_CERT_FILE} = "path-to-cert.crt";
$ENV{HTTPS_KEY_FILE} = "path-to-key.key";
另外随机尝试这样做: $ ENV {PERL_NET_HTTPS_SSL_SOCKET_CLASS} = “IO ::插座:: SSL”;
我试过两个不同版本的Perl(5.10.1和5.24.1)
,并安装了OpenSSL 1.0.2j的
有人建议此变通办法:
# workaround for ssl bug
use LWP::Protocol::https10();
LWP::Protocol::implementor('https', 'LWP::Protocol::https10');
但没有工作。
没有任何防火墙或任何我知道的关于在Linux上配置的防止外部绑定套接字的问题,但我觉得这是问题所在。
我看过程序通过perl调试程序,它似乎一直循环遍历所有的端口,直到它超时。
请帮忙!!!!我疯了。有没有人知道在Linux系统级别的东西,可能会导致我无法从Perl使用SSL?
P.S.还尝试将此添加到我的用户代理:
ssl_opts => {verify_hostname => 0},
protocols_allowed => ["https"]
我忘了提,完全相同的代码是在生产和工作的罚款不同的Linux服务器上。 Verio“迁移”了我的服务器并破坏了很多东西。 – user3486363
“通过港口循环”是什么意思? – ikegami
有数百(数千?)次尝试绑定到具有许多不同端口号的套接字。 – user3486363