我最近升级到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
,它确实有效。所以,我几乎肯定它与钥匙有关。
有没有办法解决这个问题?我可以设置它如此卷曲或萨翁让我使用不安全的钥匙?
答案 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。