2013-05-23 9 views
5

RestClientを使用してSSLクライアント証明書を使用して保護されたページを取得しようとしています。次のように私のコードは次のとおりです。RestClientがSSLクライアント証明書を使用してリソースを取得できません

require 'restclient' 

p12 = OpenSSL::PKCS12.new(File.read('client.p12'), 'password') 
client = RestClient::Resource.new('https://example.com/', 
            :ssl_client_key => p12.key, 
            :verify_ssl => OpenSSL::SSL::VERIFY_NONE) 
client.get 

私はそれを実行すると、私は次の失敗を参照してください。私は同じエラーを取得するよう

1.9.3-p374 :007 > client.get 
RestClient::BadRequest: 400 Bad Request 
    from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/abstract_response.rb:48:in `return!' 
    from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/request.rb:230:in `process_result' 
    from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/request.rb:178:in `block in transmit' 
    from /home/duncan/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/net/http.rb:745:in `start' 
    from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/request.rb:172:in `transmit' 
    from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute' 
    from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute' 
    from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/resource.rb:51:in `get' 
    from (irb):7 
    from /home/duncan/.rvm/rubies/ruby-1.9.3-p374/bin/irb:13:in `<main>' 

を、私は、これが認証に失敗しているかなり確信していますクライアント証明書をインストールしていない場合はブラウザです。

私はOpenSSL::SSL::VERIFY_NONEを使用しています。サーバーには自己署名証明書があるため、これを無視して渡す正しい値だと思います。

この作業をどのようにするかについてのご意見は、非常に高く評価されます。詳細なドキュメントへのポインタ、または別のGemの提案が機能する可能性があります。私は宝石のドキュメントやGoogle :(

答えて

6

あなたのHTTPS要求がクライアント証明書と同様にキーを必要としているいずれかの多くの運を持っていませんでしたしてみてください。

client = RestClient::Resource.new('https://example.com/', 
            :ssl_client_cert => p12.certificate, 
            :ssl_client_key => p12.key, 
            :verify_ssl => OpenSSL::SSL::VERIFY_NONE) 

それがない場合

+4

「VERIFY_NONE」のソリューションを持つことは、非常に多くのレベルで間違っています... sslを使用する際のポイントは何ですか? –

+1

@ JarmoPertman 'VERIFY_NONE'は、自己署名証明書を持つサーバーに対してローカルに開発する場合に便利です。 – WildlyInaccurate

+3

ええ、しかし、実際に何ができるかについての説明なしに、SOが「VERIFY_NONE」で受け入れられた回答でいっぱいの場合、このようなコードはどこにでも結びつき、証明書は検証されない可能性が高いです。 –

関連する問題