Boost SSL verifica los certificados caducados y autofirmados
Estoy usando Boost's asio para conectarme a un sitio a través de HTTPS. Quiero que esto solo tenga éxito si el certificado es válido, no ha caducado, no está autofirmado, etc. Desafortunadamente, parece que siempre funciona independientemente. Aquí está mi código:
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);
Y así. Si yo usoset_verify_callback()
y volverfalse
desde la devolución de llamada, la conexión falla, peropreverified
siempre parece ser cierto, incluso parahttps://self-signed.badssl.com/. ¿Seguramente eso no está bien?