我正在考虑通过非TCP连接实现TLS的可能性。这个想法是使用SSLEngine,它提供了将数据加密/解密到内存缓冲区并通过我们想要的可靠传输发送数据的可能性。
我必须实现SSL协议定义的所有握手(客户端你好,服务器你好…等等(
如果我这样做,我将如何测试我的实现是否有效?有没有我可以运行的"官方TLS测试套件"?
谢谢你的建议
显式排除TCP的事实使事情变得更加复杂。TLS对底层传输的工作方式有一些假设。您可以了解QUIC基本上是如何通过UDP提供TLS的,以及它的限制条件
至于官方的"测试套件",我有一些想法可以提供,由于TCP的依赖性,这可能不会开箱即用,但它们可能是一个开始:
- https://github.com/tomato42/tlsfuzzer是一个"SSL和TLS协议测试套件和模糊器",但它是一个正在进行的工作,最重要的是它需要一个HTTP服务器,因此需要TCP
- https://github.com/noxxi/p5-ssl-tools执行各种检查,不仅针对HTTP
- https://testssl.sh/提供了一个命令行工具
在更抽象的层面上(我不知道它们是否是使用它的工具,但它们可能存在(,在起草TLS 1.3的同时,创建了一个文档来收集典型的握手消息,以便您可以将它们用作示例。
在此处查找:https://datatracker.ietf.org/doc/draft-ietf-tls-tls13-vectors/
其摘要是:
显示了TLS 1.3握手的示例。私钥和输入以便可以再现这些握手
显示中间值,包括机密、流量密钥和IV,以便可以根据这些值增量检查实现。