如何让 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_file
或ca_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 方法?
Ruby 雾 gem 导致服务器无法运行:无法加载此类文件 -- xmlrpc/client (LoadError)