如何使用Chrome和Firefox与Ruby服务器建立安全的HTTP/2连接?
下面的服务器代码与curl和Safari建立了SSL连接,但与Firefox或Chrome不兼容。保存证书异常后在Safari上工作如何使用Chrome和Firefox与Ruby服务器建立安全的HTTP/2连接?,ruby,google-chrome,ssl,httpserver,http2,Ruby,Google Chrome,Ssl,Httpserver,Http2,下面的服务器代码与curl和Safari建立了SSL连接,但与Firefox或Chrome不兼容。保存证书异常后在Safari上工作 server = TCPServer.new( 8080 ) ctx = OpenSSL::SSL::SSLContext.new ctx.cert = OpenSSL::X509::Certificate.new(File.open('lib/keys/server.crt')) ctx.key = OpenSSL::PKey::RSA.new
server = TCPServer.new( 8080 )
ctx = OpenSSL::SSL::SSLContext.new
ctx.cert = OpenSSL::X509::Certificate.new(File.open('lib/keys/server.crt'))
ctx.key = OpenSSL::PKey::RSA.new(File.open('lib/keys/server.key'))
ctx.ssl_version = :TLSv1_2
ctx.options = OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:options]
ctx.ciphers = OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ciphers]
server = OpenSSL::SSL::SSLServer.new(server, ctx)
我尝试将证书添加到Firefox和密钥链(OSX),但仍然得到了许可
位于的网页可能暂时关闭,或者可能已永久移动到新的网址
错误、速度、不足、运输、安全
谷歌搜索表明密码存在问题,但以下几点没有区别:
ctx.ciphers = 'AESGCM:HIGH:!aNULL:!MD5'
ctx.ciphers = 'EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES'
ctx.ciphers = 'TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5'
注释掉ctx.ciphers
也没有帮助
在Firefox上,连接挂起。没有找到获取错误的好方法
使用Chrome53、Firefox46和OpenSSL 1.0.2j
什么可能导致此错误?Chrome似乎坚持使用HTTP/2的临时ECDH密钥交换,要使其正常工作,您需要设置:
我是基于,我想这也是你代码的来源。请注意,在该代码中,它使用了
lambda do | | | |
,(带下划线,但没有*
),这会导致问题,因为args的数量是错误的,lambda
严格要求传递正确的数字,因此会出现错误。我把它改回原来的*args
这里,它似乎有。由于您似乎在该repo中处于活动状态,您可能希望将其更改为类似于*\u args
的内容。在未来版本的Openssl和Ruby绑定中,这种行为似乎会发生变化:OMZ。我花了一整天的时间想弄明白这一点。我正在使用相同的示例代码。我认为这是密码的问题。我删除了这段代码,因为它导致了问题,我正要把它重新添加进去,看看它为什么会失败。我甚至花了一段时间才弄清楚到底发生了什么。使用lambda
的问题很棘手,它会导致回调完全失败,但原因并不明显。在Chrome上可以工作,但在Firefox 49上它只是挂起。好吧,我发现了一件事。Firefox修复程序:ctx.alpn_协议=['h2']
。
ctx.tmp_ecdh_callback = lambda do |*args|
OpenSSL::PKey::EC.new 'prime256v1'
end