Savon:设置SSL密码列表



我最近升级到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,它确实有效。所以,我几乎肯定这与钥匙有关。

有什么办法绕过这个吗?我可以把它设置成卷曲的吗?还是Savon让我用一把不安全的钥匙?

Savon将HTTPi库用于网络请求,但该库不支持设置SSL密码,这可以从文档中的SSL选项列表中看出。

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

所以我想你唯一的选择是在调用设置Curb客户端时对HTTPi进行猴子补丁以设置适当的密码。一个更干净的方法是对Savon进行猴子补丁,将"ssl_ciphers"选项传递给HTTPi库,但如果您需要,我将把它作为一个练习留给您:)。

最直接的补丁是HTTPi的curb适配器中的setup_ssl_auth方法。以下修补程序重新定义了此方法,以显式拒绝允许的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密码的更多说明可以在libcurl文档中找到。

最新更新