TL;DR 版本
我想知道:
- ECDHE 的使用规范在哪里定义(在证书参数或 SSL 上下文的服务器配置中,或其他地方)?
- 在非家庭滚动证书设置中,谁负责定义 ECDHE 公共(public)和私有(private)信息(最终用户或证书提供商)?
- 是否可以在不导致证书出现问题的情况下制作似乎未使用 ECDHE 的现有证书?
- 有没有人在带有 ECDHE 设置的 Boost::ASIO 中使用 SSL 的例子?
加长版
我们一直在构建一个应用程序,该应用程序使用来自外部证书颁发机构的适当付费证书。该应用程序使用基于 Boost ASIO 和 Boost Beast 的自制服务器设置,我们最近才注意到它在 iOS 上运行不佳——ASIO 表示没有共享密码。
阅读 TLS 的工作原理后,我发现我们服务器的某些部分阻止我们使用 ECDHE-* 密码套件(iOS 似乎想要)来提供 TLS - 但我很难理解了解如何将 ASIO 和我们当前的证书/ key 用于 ECDHE 服务。
我尝试过的:
- 使用相同的证书和 key ,使用 set_tmp_dh 将
openssl dhparam
的结果添加到 ASIO 中,然后指定密码。 Curl 报告说这允许使用DHE
而不是ECDHE
的连接。指定仅使用ECDHE
的密码会导致连接时出错。 - 尝试使用与上述类似的方法将
openssl ecparam
的输出传递给 ASIO。我无法格式化 ASIO 接受的内容。 - 尝试查看是否有一种方法可以将
openssl ecparam
的输出与另一个组合函数一起使用,将原始证书修改为使用ECDHE
的证书。我从 the OpenSSL wiki 了解到这个建议如果证书不包含ASN1 OID: prime256v1
行(或类似的命名曲线),则它不适合 ECDHE 使用。
在这一点上,我不确定问题真正出在哪里(在 ASIO 中,在证书中,或者在我如何将它们放在一起)以及我在互联网上可以找到的大部分信息都与家庭有关-从头开始滚动一切,而不是使用现有证书。
最佳答案
19 年 5 月 11 日更新
https://github.com/chriskohlhoff/asio/pull/117使用 ECDHE 为 ASIO 引入了更改。需要等待一段时间才能看到它变成了哪个 Boost lib 版本。
原始答案
我似乎已经为任何谷歌搜索者找到了答案 - 在撰写本文时,ASIO 似乎并不支持 ECDHE。 This issue从主 repo 协议(protocol)中可以看出,ECDHE 有望获得支持,但尚未实现。
关于c++ - 将 ECDHE TLS 与 Boost ASIO 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49375688/