【问题标题】:How to test an implementation of TLS based on SSLEngine?如何测试基于 SSLEngine 的 TLS 实现?
【发布时间】:2018-12-13 16:06:04
【问题描述】:

我正在考虑通过非 TCP 连接实现 TLS 的可能性。 我们的想法是使用 SSLEngine,它提供了加密/解密数据到内存缓冲区的可能性,并通过我们想要的可靠传输方式发送它们。

我必须实现 SSL 协议定义的所有握手(客户端问候、服务器问候……等)。

如果我这样做,我将如何测试我的实现是否正常工作?有没有我可以运行的“官方 TLS 测试套件”?

感谢您的建议

【问题讨论】:

  • 我使用了一个名为 TestSSLServer4,exe 的程序来验证我的服务器运行的 TLS 版本。也许这可以满足您的需求。
  • SSLEngine 实现了握手,以及 TLS 协议的其余部分;它唯一没有实现的正是传输,因此它可以与 Java Socket 以外的传输实现一起使用。如果您使用 SSLEngine 实现(ed)一个客户端和服务器,它们共享一些有序、可靠的传输,并且它们成功通信,那么它就可以工作; TLS 的一个要点和特点是在传输过程中检测数据的任何“篡改”。如果您的传输不是 TCP,当然您将无法与任何使用 TCP 的符合标准的实现进行互操作。

标签: java ssl tls1.2 sslengine


【解决方案1】:

您明确排除 TCP 的事实使事情变得更加复杂。 TLS 对底层传输的工作方式有一些假设。你可以看看 QUIC 基本上是如何通过 UDP 提供 TLS 的以及它的约束。

至于官方的“测试套件”,我有一些想法可以提供,由于 TCP 的依赖关系,这可能不会像开箱即用那样工作,但它们可能是一个开始:

在更抽象的层面上(我不知道它们是否是使用它的工具,但它们可能存在),当起草 TLS 1.3 的同时创建一个文档来收集典型的握手消息,以便您可以使用以他们为例。

在这里找到它:https://datatracker.ietf.org/doc/draft-ietf-tls-tls13-vectors/

它的摘要是:

显示了 TLS 1.3 握手的示例。私钥和输入 提供这些握手信息是为了重现这些握手。
包括秘密、流量密钥和 IV 在内的中间值是
显示以便可以逐步检查实现
这些值。

【讨论】:

  • tlsfuzzer 的作者在这里:虽然是的,目前需要 TCP,HTTP 不是,测试也可以在 echo 服务器上运行
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 2022-09-26
  • 1970-01-01
相关资源
最近更新 更多