c++ - 需要说明使用 Boost asio 的 SSL 客户端

标签 c++ ssl https

我有一个使用 Boost_asio 进行 TCP/IP 连接的 C++ 应用程序,它读取 Web 服务器中的 .php 文档,然后使用 php 脚本更新某些统计数据。

整个过程按计划进行,但最近服务器更改为使用 SSL(Google 强制),自然而然地,之前的连接停止工作。

在阅读了大量有关 SSL 的理论知识之后,我仍然对某些实际细节一无所知。

使用 Boost asio documentation 中的示例和一个文件“cacert.pem”,按照这个网站中的指示从某处下载,我可以使用以下方法正确运行该示例:

<host> = “www.google.com” and <port> = “https”.

使用“原样”示例,Google 服务器响应为:

Verifying /OU=GlobalSign Root CA - R2/O=GlobalSign/CN=GlobalSign Verifying /C=US/O=Google Trust Services/CN=Google Internet Authority G3 Verifying /C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com Enter message: Reply:

但是在使用的时候

<host> =  “www.zator.com” and <port> =  “https”

我的域,托管在 1&1 IONOS,回复是:

Handshake failed: tlsv1 alert internal error

此时我有几个问题:

这句话到底是什么意思:ctx.load_verify_file("cacert.pem");

那个文件的内容,可能是与我的域连接失败的罪魁祸首?

这句话是完成连接所必需的吗?

在谷歌服务器的情况下(没有错误),是否应该在 io_context.run(); 这句话之后正确建立连接?

假设我公开了客户端的成员 socket_(在示例中是私有(private)的),我可以继续一些吗(我无法在 google 中测试 :-)

std::string request("GET /mystatistics.php HTTP/1.1\r\n\r\n");
boost::asio::write(c.socket_, boost::asio::buffer(request));
boost::system::error_code ec;
std::string response;
do {        // read response
    char buf[1024];
    size_t bytes_transferred = c.socket_.read_some(boost::asio::buffer(buf), ec);
    if (!ec) response.append(buf, buf + bytes_transferred);
} while (!ec);
std::cout << "Response received: '" << response << "'\n";

提前致谢。

最佳答案

我找到了一些有用的信息 here .一个很好的信息,尽管是部分信息,也是进一步搜索的一个很好的起点

关于c++ - 需要说明使用 Boost asio 的 SSL 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561647/

相关文章:

c++ - Win32 resource.hpp 为什么资源 ID 这么高?

c++ - 如何使用 union 成员的大小计算编译时值?

c++ - 为什么要使用虚函数?

ios - 以明文形式发送用户名/密码是否安全?

ssl - 不能信任 ubuntu 18.04.2 LTS 中的开发 https 自签名证书

java - 套接字 IO - 如何配置和连接到安全域上的 netty 套接字 io 服务器

c++ - OpenglES 2.0 顶点着色器属性

ssl - 如何使用 ruSTLs 库建立 TLS 连接?

wordpress - 如何将特定网址的 https 重写为 http?

.htaccess - 使用 .htaccess 控制某些页面上的 HTTPS