我最近升级到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文档中找到。