2013-05-23 19 views
5

Próbuję użyć RestClient pobrać stronę, która jest zabezpieczona za pomocą certyfikatu klienta SSL. Mój kod wygląda następująco:RestClient braku GET zasobu za pomocą certyfikatu klienta 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 

Gdy go widzę następujące awaria:

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>' 

jestem prawie pewien, że to awaria w celu uwierzytelnienia, jak uzyskać ten sam błąd w przeglądarkę, jeśli nie zainstaluję certyfikatu klienta.

Używam OpenSSL::SSL::VERIFY_NONE, ponieważ serwer ma samopodpisany certyfikat i uważam, że jest to wartość poprawna do pominięcia.

Wszelkie sugestie, w jaki sposób uzyskać tej pracy byłoby bardzo mile widziane - nawet wskaźnik do jakiejś szczegółowej dokumentacji, czy sugestia innego Gem mógł pracować. Ja nie miałem dużo szczęścia albo z docs Gem lub Google :(

Odpowiedz

6

Żądanie HTTPS będzie potrzebował certyfikat klienta, a także klucz Spróbuj:.

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

Jeśli to nie pracować, możesz spróbować przechwycić pakiety uzgadniania (np. z WireShark), aby sprawdzić, czy API oferuje certyfikat:

+4

Posiadanie rozwiązania z 'VERIFY_NONE' jest tak źle na tylu poziomach ... Jaki jest sens używania ssl kiedy nie zweryfikować certyfikat? –

+1

@JarmoPertman 'VERIFY_NONE' jest przydatna przy opracowywaniu lokalnie na serwerze z certyfikatu z podpisem własnym. – WildlyInaccurate

+3

Tak, ale jeśli tak jest pełen akceptowanych odpowiedzi z 'VERIFY_NONE' bez żadnego wyjaśnienia tego, co faktycznie może zrobić, to jest wysoce prawdopodobne, że kod tak skończy się wszędzie i będą weryfikowane żadnych certyfikatów. –

Powiązane problemy