我正在寻找C ++中的客户端TLS连接示例。最适合Visual Studio,但老实说,它可以是任何编译器。我发现了几个C样本。但是没有人工作。我从C中的示例开始:https : //wiki.openssl.org/index.php/SSL/TLS_Client
但是失败了
res = BIO_do_connect(web);
如果要连接到自己的node.js服务器(使用直接IP地址),请使用“系统库”,或者使用crypto.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连接
我正在寻找C ++中的客户端TLS连接示例。
我认为OpenSSL到C ++有几个端口。他们尝试做完整的类包装器。请参阅Google上的openssl ++类。
当我在C ++中使用它时,我使用唯一的指针进行清理。例如,请参见如何在C ++中将RSA *作为字符串正确打印?。我主要使用它来确保清理。我认为它类似于“资源获取是初始化”模式。
OpenSSL还为相似的库和框架提供了一个页面。请参阅OpenSSL Wiki上的“相关链接”页面。
但是失败了
res = BIO_do_connect(web);
如果要连接到自己的node.js服务器(使用>直接IP地址),请使用“系统库”,或者使用“错误的主机名查找”
我的猜测是证书中的名称与URL中用于连接的名称不匹配。
您可以通过在host
文件中添加条目来使名称生效。实际上,这是您的本地DNS覆盖。请参阅Microsoft TCP / IP主机名解析顺序。
或者,您可以生成具有所有必需名称的证书。为此,请参见如何使用openssl创建自签名证书?
强制服务器关闭连接(我不知道发生了什么,因为我现在不知道如何告诉node.js告诉我更多信息)。
"POST /test.de HTTP/1.1 \nHost: test.de\nContent-Type: application/json\nContent-Length: %d\n\n"
由于你缺乏的Connection: close
请求头,服务器可能是以下RFC 7230,HTTP / 1.1消息语法和路由,第6.1节:
不支持持久连接的服务器必须在每个没有1xx(信息)状态代码的响应消息中发送“关闭”连接选项。
另外,可能应该是:
"POST /test.de HTTP/1.1\r\nHost: test.de\r\nContent-Type: application/json\r\nContent-Length:%d\r\n\r\n"
\r\n
用作换行符,不是\r
和不是\n
。使用double\r\n
来终止标头。您可以快速验证正在标准中搜索“ CRLF”。您将参与ABNF语法的讨论。
因此,我搜索了一个有效的示例,或者如何使用在C ++中运行的自己的证书获取TLS连接
这里的窍门是创建格式正确的证书。为此,请参见如何使用openssl创建自签名证书?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句