Savon:设置SSL密码列表

时间:2016-04-11 23:54:01

标签: ruby-on-rails macos curl savon curb

我最近升级到OS X El Capitan,现在我收到错误SSL_connect returned=1 errno=0 state=error: dh key too small。我知道这是因为服务器使用的是不安全的Diffie Hellman密钥,但我无法改变服务器的任何内容。

如果我使用Homebrew的curl版本并执行curl --cipher 'DEFAULT:!DH' https://my.site.com,它确实有效。所以,我几乎肯定它与钥匙有关。

有没有办法解决这个问题?我可以设置它如此卷曲或萨翁让我使用不安全的钥匙?

1 个答案:

答案 0 :(得分:0)

Savon使用HTTPi library作为网络请求,但此库不支持设置SSL密码,可以从SSL options in the documentation列表中看到。

从问题标签中我假设您使用Curb作为Savon / HTTPi和Curb的网络适配器,幸运地支持设置各种SSL选项,包括通过curl上的常规set method允许的密码列表客户端。

所以我猜你唯一的选择就是在调用设置Curb客户端时对HTTPi进行修补以设置适当的密码。一个更干净的方法就是让萨文补丁通过一个" ssl_ciphers" HTTPi库的选项,但如果您需要,我会将其留作练习:)。

最直接的修补地点是HTTPi的curb适配器中的setup_ssl_auth method。以下修补程序重新定义此方法,以明确拒绝允许的SSL密码列表中的DH密码

module HTTPI
  module Adapter
    class Curb

      alias_method :orig_setup_ssl_auth, :setup_ssl_auth

      private 
      def setup_ssl_auth
        orig_setup_ssl_auth
        @client.set(:SSL_CIPHER_LIST, "DEFAULT:!DH")
      end

    end
  end
end

补丁首先调用原始set_ssl_auth方法,然后拒绝客户端上的DH密码。请注意,此修补程序拒绝在您的应用程序中使用Savon / HTTPi的DH个密码!

有关设置SSL密码的更多说明,请访问in the libcurl docs