【问题标题】:Cowboy Webserver using HTTP2 and TLS getting ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY in Chrome使用 HTTP2 和 TLS 的 Cowboy Web 服务器在 Chrome 中获取 ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY
【发布时间】:2018-10-31 15:14:22
【问题描述】:

我正在使用:Erlang OTP 21 和 Cowboy 2.4 代码:

cowboy:start_tls( 
                  my_listener,
                  [
                      {port, Web_Server_Port},
                      {certfile, Cert_File},
                      {keyfile, Key_File}
                  ],
                  #{env => #{dispatch => dispatcher()}}
                )

我正在使用它来启动 Web 服务器,它在 HTTP1.1 上运行良好,但现在 Chrome 使用的是 HTTP2,并且无法禁用。 所以现在我收到了:

ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY

我在启用 HTTP2 的 Firefox 中也遇到了类似的问题:

Error code: NS_ERROR_NET_INADEQUATE_SECURITY

但在 Firefox 上我可以禁用 HTTP2。禁用 HTTP2 时它工作正常。 我已经验证我的证书是好的并且我在 HTTP1.1 下获得了绿色锁 我读过 HTTP2 对所使用的密码和它们出现的顺序更加严格。

修复 Chrome 中的 ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY SSL 错误 https://www.jeffgeerling.com/blog/2016/fixing-errspdyinadequatetransportsecurity-ssl-error-chrome 但不确定这是否是问题所在。

我不确定要使用什么密码,也不完全确定如何指示它们在牛仔中的使用。我尝试在选项中添加密码选项,但这并不能解决问题:

{ciphers, [
        {ecdhe_ecdsa,aes_256_cbc,sha384,sha384},
         {ecdhe_rsa,aes_256_cbc,sha384,sha384}, 
         {ecdh_ecdsa,aes_256_cbc,sha384,sha384},
         {ecdh_rsa,aes_256_cbc,sha384,sha384},
         {dhe_rsa,aes_256_cbc,sha256},
         {dhe_dss,aes_256_cbc,sha256},
         {ecdhe_ecdsa,aes_256_cbc,sha},
         {ecdhe_rsa,aes_256_cbc,sha},
         {dhe_rsa,aes_256_cbc,sha},
         {dhe_dss,aes_256_cbc,sha},
         {ecdh_ecdsa,aes_256_cbc,sha},
         {ecdh_rsa,aes_256_cbc,sha},
         {ecdhe_rsa,aes_128_cbc,sha},
         {dhe_rsa,aes_128_cbc,sha},
         {dhe_dss,aes_128_cbc,sha},
         {ecdh_ecdsa,aes_128_cbc,sha},
         {ecdh_rsa,aes_128_cbc,sha}
    ]}

关于我在这里做错了什么有什么建议吗?

【问题讨论】:

    标签: ssl erlang http2 cowboy ranch


    【解决方案1】:

    HTTP/2 forbids the use of old ciphers 包括您列出的所有 CBC 密码。

    启用一些像这样的 GCM 密码,这应该被大多数浏览器接受:

    {ciphers, ["ECDHE-RSA-AES256-GCM-SHA384"]}
    

    虽然默认情况下它应该允许这些。

    更多信息请看这里:http://ezgr.net/increasing-security-erlang-ssl-cowboy/

    【讨论】:

    • 我尝试添加确切的密码字符串,但在控制台中收到此错误消息:
    • =INFO REPORT==== 31-Oct-2018::14:29:41.874434 === TLS 服务器:在 ssl_connection.erl:1215 的状态密码中生成服务器警报:致命 - 意外消息- {unexpected_msg,{alert,2,20, {"ssl_cipher.erl",308}, undefined,decryption_failed}}
    • 您使用的是哪个版本的 OpenSSL?
    • 这是我在 2018 年 8 月 14 日更新到 OpenSSL 1.0.2p 的旧版本,但错误消息仍然相同。看来他们正在将 cipher_suites 转换为地图,例如#{cipher => aes_256_gcm,key_exchange => ecdhe_rsa,mac => aead,prf => sha384} 并且有一个函数可以转换为字符串,例如ssl:suite_to_str(#{cipher => aes_256_gcm,key_exchange => ecdhe_rsa,mac => aead,prf => sha384})。这导致“TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384”,但这也不被接受......想法??
    • 既然您已经更新了 OpenSSL,那么删除密码配置怎么样?虽然你确定 Erlang/Cowboy 正在使用更新的配置吗?您还尝试过我在答案中给出的最后一个链接中的 Cowboy 配置吗?
    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 2014-10-08
    • 2017-05-23
    • 2013-08-26
    • 2020-05-25
    • 2017-05-16
    • 2015-08-21
    • 2015-10-23
    相关资源
    最近更新 更多