【问题标题】:How to build OpenSSL 1.0 DLLs with less secure TLS protocol versions disabled?如何在禁用安全性较低的 TLS 协议版本的情况下构建 OpenSSL 1.0 DLL?
【发布时间】:2021-02-20 15:49:19
【问题描述】:

我有一个提供 FTPS 服务的闭源 Windows 服务器应用程序。已强制要求该服务应拒绝使用低于 1.2 的协议版本的 TLS 连接。

该应用程序使用 32 位版本的 DLL libssl32.dlllibeay32.dll 来实现其 OpenSSL,因此我的想法是编译这些 DLL 的自定义版本,不允许使用 TLS 1.0 和 1.1。

经过大量搜索,我发现this answer 描述了诸如no-tls1no-tls1-method 等配置标志,以分别禁用给定协议版本的协商和实现。然而,结果证明这是一条死胡同,因为这些标志仅在 OpenSSL 1.1 及更高版本中可用。

我能够为 OpenSSL 1.1.1 编译 DLL,但它们与应用程序不兼容。编译 OpenSSL 1.0.2 生成了兼容的 DLL,但我无法使用 1.0.2 中可用的标志来实现所需的行为。该版本确实有 no-tls1 标志,但其行为与 1.1.x 中的标志不同,使用它对 TLS 协议协商没有影响。

此时,我唯一的选择似乎是修改 OpenSSL 1.0.2u 的源代码,以防止使用不需要的 TLS 版本。由于不熟悉代码库,我发布此内容是希望有人可以帮助描述需要修改的内容以实现我的目标。我也愿意考虑替代解决方案。

【问题讨论】:

    标签: c ssl dll openssl tls1.2


    【解决方案1】:

    我可以通过修改 ssl\s23_srvr.c 中的 ssl23_get_client_hello() 函数来检查请求的版本并在低于 TLS 1.2 时抛出 SSL_R_UNSUPPORTED_PROTOCOL 错误来实现我的目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 2018-09-20
      • 1970-01-01
      • 2021-10-30
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多