c++ - 将 ECDHE TLS 与 Boost ASIO 结合使用

标签 c++ ssl boost openssl ecdhe

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_dhopenssl 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/

相关文章:

c++ - 使用 cout 时发出奇怪的哔哔声

apache - Apache 上的反向代理(适用于 QNAP)

ssl - 使用安全的后端即服务 (BaaS)(例如 Parse.com)是否是避免使用 SSL 网站的借口?

c++ - 在std::unique_ptr的 vector 上使用make_transform_iterator获取const指针

c++ - 台球游戏物理速度计算问题

c++ - 在 C++ 中两次删除 nullptr 是否安全?

c++ - 堆与堆栈分配

docker - getsockopt 异常失败 : Operation not permitted in Docker-Compose

multithreading - boost ASIO IO_SERVICE 实现?

c++ - 变量类型不完整的编译器错误