【发布时间】:2015-07-11 07:18:48
【问题描述】:
我正在寻找 C++ 中的客户端 TLS 连接示例。最适合 Visual Studio,但老实说,它可以是任何编译器。我找到了几个 C 样本。但是没有人工作。我从 C 中的这个示例开始: https://wiki.openssl.org/index.php/SSL/TLS_Client
但它失败了
res = BIO_do_connect(web);
如果我想连接到我自己的 node.js 服务器(使用直接 IP 地址)或使用 encrypted.google.com 作为 url 的“错误主机名查找”,请使用“系统库”。 使用 libressl 和 Visual Studio 2013。
下一站:http://fm4dd.com/openssl/sslconnect.htm
这里程序运行成功。但任何尝试在结尾写入 SSL 连接:
std::string json = "{'test':'huhu'}";
char buff[1024];
sprintf(buff, "POST /test.de HTTP/1.1 \nHost: test.de\nContent-Type: application/json\nContent-Length: %d\n\n", json.length());
std::string post = buff;
int snd = SSL_write(ssl, post.data(), post.length());
snd = SSL_write(ssl, json.data(), json.length());
强制服务器关闭连接(我不知道到底发生了什么,因为我现在不知道如何告诉 node.js 告诉我更多信息)。
所以我搜索了一个工作示例或如何使用在 C++ 中运行的自己的证书获取 TLS 连接
【问题讨论】:
-
您可以查看主要 OpenSSL 命令行工具中的 s_client 代码。这支持很多证书选项。
-
你应该知道最好不要要求教程或示例 :) 我经常使用 C++ 来包装 OpenSSL,但我使用唯一指针这样做,因此会自动进行清理。这是它的样子:How to properly print RSA* as string in C++?.
-
@jww 过失。今天下午我很绝望 :-) 现在看起来好多了。但是这个问题怎么办?删除它(诚实的问题)?
-
@Martin - 我认为这是您的选择(甚至认为这是一个很好的问题)。它不会累积反对票,因此允许它留下并可能关闭是没有害处的。如果它保持不变,那么其他人可以将其用作参考。 (由于网站政策,我投票关闭)。