【问题标题】:How do I tell Ruby's OpenSSL library to ignore a self-signed certificate error?如何告诉 Ruby 的 OpenSSL 库忽略自签名证书错误?
【发布时间】:2009-10-12 14:48:09
【问题描述】:

我正在尝试使用 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 的操作?

【问题讨论】:

    标签: ruby soap wsdl openssl certificate


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

      • 您是说我将VERIFY_PEER 重新定义为VERIFY_NONE 的值?这是有风险的,因为我无法确定检查验证方法的代码是否检查 VERIFY_NONE 或 VERIFY_PEER 的值。重新定义常量绝对是最后的手段。
      • 不过,我应该说它起作用。这可能是最后的手段,因为它是偷偷摸摸的,但如果一切都失败了......
      【解决方案3】:

      我偶然发现了这个网址:https://gist.github.com/fnichol/867550。这可能对遇到类似问题的人有用。

      【讨论】:

        猜你喜欢
        • 2011-01-16
        • 2022-01-03
        • 1970-01-01
        • 2012-08-24
        • 2018-07-18
        • 1970-01-01
        • 2016-07-27
        • 2012-08-30
        • 2018-07-26
        相关资源
        最近更新 更多