首页 > 解决方案 > Rustls(或 briansmith/ring)AES CBC 选项 DONT_INSERT_EMPTY_FRAGMENTS 类似物

问题描述

我正在使用 rustls 库 ( https://github.com/ctz/rustls ) 进行 TLS 连接。一切都很好,除了一些服务器没有建立连接(在 HelloClient 消息后失败),因为它们不支持 CBC 模式的空片段(OpenSSL 的选项名称是 SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS,更多详细信息在这里https://www.openssl .org/~bodo/tls-cbc.txt)。我知道 rustls 也使用环库(https://github.com/briansmith/ring),但我也找不到类似的选项。

我试图研究 rustls 和 ring 代码,但没有找到类似的选项。

我希望与不支持它的服务器建立没有空片段的 tls 连接。例如,Window 7 默认使用 tls 1.0(或 1.1)。

谢谢你的帮助。

标签: rust

解决方案


Rustls 不支持 CBC 密码套件或 TLS 1.0 或 1.1。在 TLS 中使用 CBC 的方式(MAC-then-Encrypt)被认为是不安全的(尤其是在与您想要的选项一起使用时),并且 Rustls 不会实现不安全的算法。Rustls 支持 TLS 1.2 和 1.3,并且仅支持 AEAD 算法(AES-GCM 和 ChaCha20-Poly1305)。

如果您想使用 Rustls 编写服务器,您需要确保您的客户端至少支持 TLS 1.2 并使用安全密码套件。如果您关心您的数据安全性或有任何合规性要求,则无论如何都应该这样做。

需要注意的是,Windows 7 将于 1 月 EOL,因此此后它的 TLS 支持不应该成为问题。


推荐阅读