如何告诉Ruby的OpenSSL库忽略自签名证书错误?

3
我将尝试使用Ruby的SOAP支持,具体如下:

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"的错误。我该如何对第一次检索WSDL本身执行等效于driver.options['protocol.http.ssl_config.verify_mode'] = OpenSSL::SSL::VERIFY_NONE的操作?

3个回答

5
我在我的加载路径上放置了一个名为“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

试试这个:

...
  <b>OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE</b>
  ::SOAP::WSDLDriverFactory.new(SERVICE_URL).create_rpc_driver
...

1
你是说我重新定义 VERIFY_PEERVERIFY_NONE 的值吗?这很危险,因为我无法确定检查验证方法的代码是否检查了 VERIFY_NONE 或 VERIFY_PEER 的值。重新定义常量是绝对的最后手段。 - James A. Rosen
我应该说,它 起作用。虽然这可能是最后的手段,因为它有些隐秘,但如果其他方法都失败了... - James A. Rosen

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接