1

次の作業用curlコマンドがあります:

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などを使用して)遊んでみましたが、すべて失敗しました(メッセージが異なるものもありました)。 ruby は大量の追加設定を送信していましたが、どれも適切とは思えませんでした)。

他のバグレポートを読んで、証明書ストアに適切な証明書がないことに関連する多くの問題を抱えている人を見てきましたが、SSL::VERIFY_NONEそれがどのように問題になるかはわかりません。

私のRubyに焼き付けられたopensslである可能性を排除することはできませんが、別のマシンでもこのコードを実行し、同じエラーが発生したことを考えると、curlが同じopensslにリンクしていると思います(これを確認する方法がわかりません)。

Net:HTTP で利用可能なすべての設定を使い果たしたかのように、rdoc に目を通しました。

これは、私が見ている何の変哲もないエラーです (わずかに匿名化されています)。

OpenSSL::SSL::SSLError: SSL_read:: ssl handshake failure
from /Users/a_user/.rvm/gems/ruby-1.9.3-p0@project/gems/right_http_connection-1.3.0/lib/net_fix.rb:52:in `sysread'
from /Users/a_user/.rvm/gems/ruby-1.9.3-p0@project/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/ruby-1.9.3-p0@project/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/ruby-1.9.3-p0@project/gems/right_http_connection-1.3.0/lib/net_fix.rb:146:in `request'
from /Users/a_user/.rvm/gems/ruby-1.9.3-p0@project/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/ruby-1.9.3-p0@project/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'
4

1 に答える 1

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と、curl の問題も明らかになる可能性があります。

于 2013-10-24T18:14:46.570 に答える