2017-01-23 15 views
1

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"] 
+0

我忘了提,完全相同的代码是在生产和工作的罚款不同的Linux服务器上。 Verio“迁移”了我的服务器并破坏了很多东西。 – user3486363

+0

“通过港口循环”是什么意思? – ikegami

+0

有数百(数千?)次尝试绑定到具有许多不同端口号的套接字。 – user3486363

回答

1

谢谢斯蒂芬乌尔里奇 - 这是一个tcp配置问题。解析器配置不正确;有正确的地址在那里一切工作。

(这将有好处非常好的获得某种类型的错误信息,或至少知道那里的超时由...来)

感谢那些谁评论!

+1

如果解析器返回了错误的地址,这个地址存在,但简单地丢弃数据包那么就不可能从TCP堆栈来获得,因此Perl程序比一个更好的消息是,试图进入服务器超时,即你得到了什么。该程序不知道的根本原因,即,如果没有这样的服务器,如果有一个防火墙阻塞交通,如果上网速度很慢,或者如果它是一个配置错误,如在你的情况,因此不能给它指向的消息真正的问题。 –

+0

有趣,谢谢,并且有道理。但是这将是可能的(是吗?)和惊人有助于返回类似“TCP:连接尝试超时”,而不是“连接在..perl5/LWP /协议/ http.pm超时”。肯定可能的是,我应该从这个消息中推断出问题,并且我只是没有足够的linux精通这样做,但是错误处理更加明确会更好。如果你不能报告问题,你至少可以说出发生的地方。 – user3486363