Я использую asio для Boost для подключения к сайту через HTTPS. Я хочу, чтобы это было успешным только в том случае, если сертификат действителен, не истек, а не сам по себе и т. Д. К сожалению, он всегда работает независимо. Вот мой код:Boost SSL проверяет истекшие и самоподписанные сертификаты
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/. Неужели это неправильно?
Weirdness. Я буду следить за этим сообщением на всякий случай, если кто-то видит здесь настоящую причину. Удивительно. Опираясь на что-то новое everyday – sehe