使用 HTTP2 和 TLS 的 Cowboy Web 服务器在 Chrome 中获取 ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY
Posted
技术标签:
【中文标题】使用 HTTP2 和 TLS 的 Cowboy Web 服务器在 Chrome 中获取 ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY【英文标题】:Cowboy Webserver using HTTP2 and TLS getting ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY in Chrome 【发布时间】: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
]
关于我在这里做错了什么有什么建议吗?
【问题讨论】:
【参考方案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 配置吗?以上是关于使用 HTTP2 和 TLS 的 Cowboy Web 服务器在 Chrome 中获取 ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY的主要内容,如果未能解决你的问题,请参考以下文章
golang http2 client 和server 使用非TLS 模式(h2c)