Using ECDHE TLS with Boost ASIO

Using ECDHE TLS with Boost ASIO

本文关键字:Boost ASIO with TLS ECDHE Using      更新时间:2023-10-16

TL;容灾版本

我想知道:

在哪里
  • 定义 ECDHE 的使用规范(在证书参数或 SSL 上下文的服务器配置中,或在其他地方)?
  • 在非本地滚动证书设置中,谁负责定义 ECDHE 公共和私人信息(最终用户或证书提供商)?
  • 是否可以在不导致证书问题的情况下制作似乎不使用 ECDHE 的现有证书?
  • 是否有人在 Boost::ASIO 中使用 SSL 和 ECDHE 设置的例子?

更长的版本

我们一直在构建一个应用程序,该应用程序使用来自外部证书颁发机构的适当付费证书。该应用程序使用基于Boost ASIO和Boost Beast的家庭服务器设置,我们最近才注意到它不能很好地与iOS配合使用 - ASIO表示没有共享密码。

阅读TLS的工作原理使我意识到,我们服务器的某些部分阻止我们使用ECDHE-*密码套件(iOS似乎想要)为TLS提供服务 - 但我很难弄清楚如何将ASIO和我们当前的证书/密钥用于为ECDHE服务。

我尝试过:

  • 使用相同的证书和密钥,使用 set_tmp_dh 将openssl dhparam的结果添加到 ASIO 中,然后指定密码。Curl 报告说,这允许使用DHE但不允许使用ECDHE进行连接。指定仅使用ECDHE的密码会导致连接时出错。
  • 尝试使用与上述类似的方法将openssl ecparam的输出传递给 ASIO。我无法格式化 ASIO 接受的内容。
  • 尝试查看是否有一种方法可以将openssl ecparam的输出与另一个组合函数一起使用,将原始证书修改为使用ECDHE的证书。我从OpenSSL维基中发现了这个,建议如果证书不包含行ASN1 OID: prime256v1(或类似的命名曲线),那么它不适合ECDHE使用。

在这一点上,我不确定问题的真正出在哪里(在 ASIO、证书或我如何将它们放在一起),我能找到的互联网上的大多数信息都与从头开始滚动所有内容有关,而不是使用现有的证书。

更新 11/05/19

https://github.com/chriskohlhoff/asio/pull/117 通过ECDHE为ASIO带来了变化。需要等待一段时间才能看到它进入哪个 Boost 库版本。

原始答案

我似乎已经为任何谷歌用户找到了答案 - 在撰写本文时,ASIO 似乎并不原生支持 ECDHE。主存储库中的此问题表明 ECDHE 正在寻求支持,但尚未实施。

以下是自 2016 年以来一直在等待合并的 ECDHE 实现的链接: https://github.com/chriskohlhoff/asio/pull/117。

+1 以引起 Boost ASIO 维护者的注意;他的速度非常慢。