nghttp2 api.binance.com ssl 错误
Posted
技术标签:
【中文标题】nghttp2 api.binance.com ssl 错误【英文标题】:nghttp2 api.binance.com ssl error 【发布时间】:2018-10-09 10:05:43 【问题描述】:我想用http/2为binance.com的api写一个客户端。 为此,我正在尝试库 nghttp2,我已经在他们的example code 中对 api 进行了测试调用:
int main(int argc, char *argv[])
boost::system::error_code ec;
boost::asio::io_service io_service;
boost::asio::ssl::context tls(boost::asio::ssl::context::sslv23);
tls.set_default_verify_paths();
// disabled to make development easier...
// tls.set_verify_mode(boost::asio::ssl::verify_peer);
configure_tls_context(ec, tls);
session sess(io_service, tls, "api.binance.com", "443");
[...]
auto req = sess.submit(ec, "GET", "https://api.binance.com/api/v1/ping");
[...]
但是它总是在错误处理程序中告诉我
sslv3 警告握手失败
我不知道如何调试它。我什至可以做些什么来理解为什么这不起作用?我试图将 tls 上下文创建的打开更改为其他内容,例如 tlsv12,但没有任何效果。如果它真的在尝试使用 sslv3,那么它不起作用也就不足为奇了,因为 api.binance.com 的 ssl 测试报告不支持 sslv3。 对 nghttp2.org 本身进行测试我没有收到此错误。 SSL 协商的某些地方出了问题。但是我怎么才能看到哪里呢?
【问题讨论】:
另一种可能是nghttp2客户端不发送server_name
扩展,但其他客户端发送。如果服务器名称指示 (SNI) 不存在,某些服务器会拒绝 Client Hello
。见***.com/questions/30817876/…。但是,我不知道如何在 application_layer_protocol_negotiation
扩展中设置 server_name
或 http/1.1
。如果你能弄清楚,请分享。希望对您有所帮助。
我对这个问题很感兴趣,所以经过一些徒劳的努力,我记录了一个错误:github.com/nghttp2/nghttp2/issues/1172。
【参考方案1】:
此问题已修复:https://github.com/nghttp2/nghttp2/pull/1173。
所以如果你赶时间不想等待 nghttp2 1.32 发布,你可以查看 master 分支。我确实从源代码构建了 nghttp,所以我可以说这需要时间,但构建起来很简单。
【讨论】:
以上是关于nghttp2 api.binance.com ssl 错误的主要内容,如果未能解决你的问题,请参考以下文章