Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Chrome和Firefox与Ruby服务器建立安全的HTTP/2连接?_Ruby_Google Chrome_Ssl_Httpserver_Http2 - Fatal编程技术网

如何使用Chrome和Firefox与Ruby服务器建立安全的HTTP/2连接?

如何使用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

下面的服务器代码与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(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