2009-10-12 8 views
3

Я пытаюсь использовать поддержку SOAP в Ruby следующим образом:Как сообщить библиотеке OpenSSL Ruby игнорировать самозаверяющую ошибку сертификата?

SERVICE_URL = 'https://...' 
... 
def create_driver 
    ::SOAP::WSDLDriverFactory.new(SERVICE_URL).create_rpc_driver 
    driver.options['protocol.http.ssl_config.verify_mode'] = OpenSSL::SSL::VERIFY_NONE 
    driver.options['protocol.http.ssl_config.client_cert'] = @certificate_path 
    driver 
end 

но вызов new(SERVICE_URL) взрывает с «OpenSSL::SSL::SSLError: certificate verify failed.» Как сделать эквивалент driver.options['protocol.http.ssl_config.verify_mode'] = OpenSSL::SSL::VERIFY_NONE для первого вызова для извлечения самого WSDL?

ответ

4

я положил файл под названием "soap/property" на моем пути загрузки, например:

- lib/ 
    - foo.rb 
    - foo/ 
     - bar.rb 
    - soap/ 
     - property 

И сделать это в файле:

client.protocol.http.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE 

В качестве альтернативы, если у вас несколько параметров с одним и тем же префиксом, вы можете использовать синтаксис группы:

[client.protocol.http] 
ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE 
... 
0

попробовать это:

... 
    OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 
    ::SOAP::WSDLDriverFactory.new(SERVICE_URL).create_rpc_driver 
... 
+1

Вы говорите, что я переопределяю 'VERIFY_PEER' значение' VERIFY_NONE'? Это опасно, так как я не могу быть уверенным, проверяет ли код проверки метода проверки значение VERIFY_NONE или VERIFY_PEER. Переосмысление констант является абсолютным последним средством. –

+0

спасибо Гай. это довольно подлый, ты прав. – avguchenko

+0

Я должен сказать, что это * будет * работать. Это может быть последнее средство, потому что это подлый, но если все остальное не удается ... –