TL;DR 版本
我想知道:
- 使用 ECDHE 的规范在哪里定义(在证书参数或 SSL 上下文的服务器配置中,或其他地方)?
- 在非家庭滚动的证书设置中,定义 ECDHE 公共和私人信息(最终用户或证书提供者)的责任是谁?
- 是否可以制作似乎不使用 ECDHE 的现有证书而不会导致证书出现问题?
- 有没有人在 Boost::ASIO 中使用带有 ECDHE 设置的 SSL 的例子?
更长的版本
我们一直在构建一个应用程序,该应用程序使用来自外部证书颁发机构的适当付费证书。该应用程序使用基于 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 wiki中找到了这一点,建议如果证书不包含该线ASN1 OID: prime256v1
(或类似的命名曲线),那么它不适合 ECDHE 使用。
在这一点上,我不确定问题真正出在哪里(在 ASIO、证书中或我如何将它们放在一起),而且我在互联网上可以找到的大多数信息都与从从头开始,而不是使用现有的证书。