2013-10-24 52 views
1

我有以下工作curl命令:SSL的問題,但不能捲曲

curl -k -E some_cert.pem https://someurl.com/__dirlist__ 

試圖用Ruby實現這個我有:

uri = URI.parse('https://someurl.com/__dirlist__') 

http_session = Net::HTTP.new(uri.host, uri.port) 
http_session.ca_file = "some_cert.pem" 
http_session.use_ssl = true 
http_session.verify_mode = OpenSSL::SSL::VERIFY_NONE 

res = http_session.get(uri.request_uri) 

我用打周圍的一切不同版本的SSL(使用http_session.ssl_version = :SSLv2_client等),所有這些都失敗了(一些使用不同的消息),我使用wireshark來匹配版本以查看curl使用的是什麼,所以不要認爲這是問題(儘管ruby發送了一堆額外的設置沒有一個似乎相關)。

從閱讀其他錯誤報告我已經看到人們有很多與他們的證書存儲沒有適當的證書有關的問題,但SSL::VERIFY_NONE我不明白這可能很重要。

我不能排除它可能是openssl烘焙到我的Ruby,但它似乎不太可能給我我也在另一臺機器上運行此代碼並得到相同的錯誤,我會假設捲曲鏈接相同的openssl(我不知道如何檢查這個)。

我已經瀏覽了rdocs,就像我用盡了Net:HTTP中的所有可用設置。

這是我看到的不倫不類的誤差(略匿名):

OpenSSL::SSL::SSLError: SSL_read:: ssl handshake failure 
from /Users/a_user/.rvm/gems/[email protected]/gems/right_http_connection-1.3.0/lib/net_fix.rb:52:in `sysread' 
from /Users/a_user/.rvm/gems/[email protected]/gems/right_http_connection-1.3.0/lib/net_fix.rb:52:in `block in rbuf_fill' 
from /Users/a_user/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/timeout.rb:68:in `timeout' 
from /Users/a_user/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/timeout.rb:99:in `timeout' 
from /Users/a_user/.rvm/gems/[email protected]/gems/right_http_connection-1.3.0/lib/net_fix.rb:51:in `rbuf_fill' 
from /Users/a_user/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil' 
from /Users/a_user/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/protocol.rb:132:in `readline' 
from /Users/a_user/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line' 
from /Users/a_user/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:2551:in `read_new' 
from /Users/a_user/.rvm/gems/[email protected]/gems/right_http_connection-1.3.0/lib/net_fix.rb:146:in `request' 
from /Users/a_user/.rvm/gems/[email protected]/gems/right_http_connection-1.3.0/lib/net_fix.rb:131:in `block in request' 
from /Users/a_user/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:745:in `start' 
from /Users/a_user/.rvm/gems/[email protected]/gems/right_http_connection-1.3.0/lib/net_fix.rb:129:in `request' 
from /Users/a_user/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:1026:in `get' 
+0

您可能需要重新編譯您的'rvm'構建的Ruby,以確保它具有正確捆綁的OpenSSL庫。嘗試建立'1.9.3-p448',看看你是否仍然有這個問題。 '-p0'確實過時了。 – tadman

+0

看看[Curb](https://github.com/taf2/curb)寶石。它使用cURL的封面,所以如果它與cURL一起工作,它將與Curb和Ruby一起工作。 –

回答

0

來自卷邊手冊:

-k, --insecure 
      (SSL) This option explicitly allows curl to perform "insecure" 
      SSL connections and transfers. All SSL connections are attempted 
      to be made secure by using the CA certificate bundle installed 
      by default. This makes all connections considered "insecure" 
      fail unless -k, --insecure is used. 

所以運行沒有-k可能揭示上的捲曲的問題,以及。

+0

啊,我從shell腳本中複製了curl命令,當我查找-k標誌時,我認爲它基本上與'SSL:VERIFY_NONE'相同。顯然我錯了,curl命令運行良好,沒有-k標誌。 – fauldsh