2009-10-12 103 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

相關問題