我有一个使用 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/