用于客户端TLS连接的OpenSSL或LibreSSL C ++示例

马丁·史洛特(Martin Schlott)

我正在寻找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连接

w

我正在寻找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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章