2017-01-23 14 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