【问题标题】:How to make a secure HTTP/2 connection to Ruby server with Chrome and Firefox?如何使用 Chrome 和 Firefox 与 Ruby 服务器建立安全的 HTTP/2 连接?
【发布时间】:2017-03-04 19:00:42
【问题描述】:

以下服务器代码与 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),但我仍然得到 ​​p>

https://localhost:8080/ 的网页可能暂时关闭,或者它可能已永久移至新网址。

ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY

谷歌搜索表明密码存在问题,但以下内容没有影响:

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 上,连接挂起。没有找到获取错误的好方法。

使用 Chrome 53、Firefox 46 和 OpenSSL 1.0.2j。

什么可能导致这个错误?

【问题讨论】:

    标签: ruby google-chrome ssl httpserver http2


    【解决方案1】:

    Chrome 似乎坚持对 HTTP/2 使用临时 ECDH 密钥交换,要使其正常工作,您需要设置 tmp_ecdh_callback

    ctx.tmp_ecdh_callback = lambda do |*args|
      OpenSSL::PKey::EC.new 'prime256v1'
    end
    

    我是基于 example code from the Ruby http-2 gem 编写的,我认为这也是您获取代码的地方。请注意,在该代码中,它使用lambda do |_args|,(带有下划线但没有*),这会导致问题,因为args 的数量是错误的,而lambda 严格要求传递正确的数字,所以你会出错。我在这里把它改回原来的*args,它似乎有been changed to fix Rubocop warnings。由于您似乎在该 repo 中很活跃,您可能希望将其更改为 |*_args| 之类的内容。

    【讨论】:

    • 看起来这种行为会在未来版本的 Openssl 和 Ruby 绑定中发生变化:github.com/ruby/openssl/commit/…
    • OMZ。我花了大约一整天的时间试图弄清楚这一点。而且,我使用的是相同的示例代码。我认为这是密码的问题。我取出这段代码是因为它会导致问题,并且正要重新添加它,看看它为什么会失败。
    • @BSeven 我也花了一段时间才弄清楚发生了什么。使用lambda 的问题很棘手——它导致回调完全失败,但原因并不明显。
    • 在 Chrome 上工作,但在 Firefox 49 上它只是挂起。
    • 好吧,我想通了一件事。 Firefox 修复:ctx.alpn_protocols = ['h2'].
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2021-10-20
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多