2009-10-12 100 views
3

我试图使用Ruby的SOAP支持如下:如何让Ruby的OpenSSL库忽略自签名证书错误?

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的值。重新定义常量是绝对的最后手段。 – 2009-10-16 01:09:58

+0

感谢Gaius。这是相当鬼鬼祟祟的,你是对的。 – avguchenko 2009-10-16 14:08:03

+0

我应该说,它*会*工作。这可能是最后的手段,因为它是偷偷摸摸的,但如果其他所有的都失败了...... – 2009-12-18 05:06:00

相关问题