【发布时间】:2016-02-03 10:53:57
【问题描述】:
我正在使用 Boost 的 asio 通过 HTTPS 连接到站点。我希望这只有在证书有效、未过期、未自签名等情况下才能成功。不幸的是,无论如何它似乎总是有效。这是我的代码:
try
{
asio::io_service ioService;
asio::ssl::context sslContext(asio::ssl::context::sslv3_client);
sslContext.load_verify_file("cacert.pem");
asio::ip::tcp::resolver resolver(ioService);
asio::ip::tcp::resolver::query query("self-signed.badssl.com", "443");
asio::ip::tcp::resolver::iterator endpointIterator = resolver.resolve(query);
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> socket(ioService, sslContext);
ioService.run();
// Enable SSL peer verification.
socket.set_verify_mode(asio::ssl::verify_peer | asio::ssl::verify_fail_if_no_peer_cert);
asio::connect(socket.lowest_layer(), endpointIterator);
socket.handshake(asio::ssl::stream_base::client);
boost::asio::streambuf request;
std::ostream requestStream(&request);
requestStream << "GET / HTTP/1.0\r\n";
requestStream << "Host: self-signed.badssl.com\r\n";
requestStream << "Accept: */*\r\n";
requestStream << "Connection: close\r\n\r\n";
asio::write(socket, request);
等等。如果我使用set_verify_callback() 并从回调中返回false,则连接确实会失败,但preverified 似乎总是正确的,即使对于https://self-signed.badssl.com/ 也是如此。肯定不对吧?
【问题讨论】:
-
怪事。我会密切关注这篇文章,以防其他人在这里发现真正的原因。惊人的。每天都在学习新事物
标签: ssl boost openssl ssl-certificate boost-asio