Using ECDHE TLS with Boost ASIO
Using ECDHE TLS with Boost ASIO
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 维护者的注意;他的速度非常慢。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 将更高的优先级设置为 boost::asio 线程处理进程
- Async_read_until限制读取的字节大小(Boost::asio)
- 程序崩溃使用boost::asio
- boost::asio 无法捕获 SIGINT
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 如何使用C++和Boost Asio从HTTP发布请求中获取键值
- std::boost::asio::p ost / dispatch 使用哪个io_context?