如何让 ruby​​ 的 xmlrpc 客户端忽略 SSL 证书错误?

Posted

技术标签:

【中文标题】如何让 ruby​​ 的 xmlrpc 客户端忽略 SSL 证书错误?【英文标题】:How can I make ruby's xmlrpc client ignore SSL certificate errors? 【发布时间】:2011-06-12 12:40:36 【问题描述】:

在 ruby​​ 中使用 xmlrpc/client 访问 XML-RPC 服务时,当服务器证书无效时,它会抛出 OpenSSL::SSL::SSLError。如何让它忽略此错误并继续连接?

【问题讨论】:

【参考方案1】:

其实客户端已经更新了,现在可以直接访问http连接了: https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/41286/diff/lib/xmlrpc/client.rb

xmlrpc.http.verify_mode = OpenSSL::SSL::VERIFY_NONE

但最好设置ca_fileca_path。 我仍然看不到将此类配置应用于_async 调用的选项。

更新:通过猴子修补客户端对象找到了解决方法:

    xmlrpc_client.http.ca_file = @options[:ca_file]
    xmlrpc_client.instance_variable_set(:@ca_file, @options[:ca_file])
    def xmlrpc_client.net_http(host, port, proxy_host, proxy_port)
      h = Net::HTTP.new host, port, proxy_host, proxy_port
      h.ca_file = @ca_file
      h
    end

所以你需要旧方法和猴子补丁。我们还要添加一个实例变量,否则新方法看不到实际值。

【讨论】:

【参考方案2】:

原来是这样的:

xmlrpc = ::XMLRPC::Client.new("foohost")
xmlrpc.instance_variable_get(:@http).instance_variable_set(:@verify_mode, OpenSSL::SSL::VERIFY_NONE)

这适用于 ruby​​ 1.9.2,但显然是在戳内部,所以真正的答案是“API 不提供这样的机制,但这是一个 hack”。

【讨论】:

以上是关于如何让 ruby​​ 的 xmlrpc 客户端忽略 SSL 证书错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 ruby​​-prof 忽略 Ruby 核心/标准库/gem 方法?

如何在 C# 中使用 XMLRPC

Ruby 雾 gem 导致服务器无法运行:无法加载此类文件 -- xmlrpc/client (LoadError)

xmlrpc - 动态选择端口号

CookComputing XmlRpc客户端-如何获取带有时区的日期时间[重复]

10 分钟入门 python rpc 实现