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