1
0
mirror of synced 2025-04-20 11:47:43 +03:00
* Renamed enable_server_host_verification to enable_server_hostname_verification and added Error::SSLServerHostnameVerification

* Add some Open SSL function calls

* Code cleanup

* Fix #1431
This commit is contained in:
yhirose 2024-09-08 22:45:47 -04:00 committed by GitHub
parent 82fcbe3901
commit e612154694
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1452,6 +1452,7 @@ public:
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
void enable_server_certificate_verification(bool enabled); void enable_server_certificate_verification(bool enabled);
void enable_server_hostname_verification(bool enabled); void enable_server_hostname_verification(bool enabled);
void set_server_certificate_verifier(std::function<bool(SSL *ssl)> verifier);
#endif #endif
void set_logger(Logger logger); void set_logger(Logger logger);
@ -1567,6 +1568,7 @@ protected:
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
bool server_certificate_verification_ = true; bool server_certificate_verification_ = true;
bool server_hostname_verification_ = true; bool server_hostname_verification_ = true;
std::function<bool(SSL *ssl)> server_certificate_verifier_;
#endif #endif
Logger logger_; Logger logger_;
@ -1873,6 +1875,7 @@ public:
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
void enable_server_certificate_verification(bool enabled); void enable_server_certificate_verification(bool enabled);
void enable_server_hostname_verification(bool enabled); void enable_server_hostname_verification(bool enabled);
void set_server_certificate_verifier(std::function<bool(SSL *ssl)> verifier);
#endif #endif
void set_logger(Logger logger); void set_logger(Logger logger);
@ -7219,6 +7222,7 @@ inline void ClientImpl::copy_settings(const ClientImpl &rhs) {
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
server_certificate_verification_ = rhs.server_certificate_verification_; server_certificate_verification_ = rhs.server_certificate_verification_;
server_hostname_verification_ = rhs.server_hostname_verification_; server_hostname_verification_ = rhs.server_hostname_verification_;
server_certificate_verifier_ = rhs.server_certificate_verifier_;
#endif #endif
logger_ = rhs.logger_; logger_ = rhs.logger_;
} }
@ -8700,9 +8704,7 @@ inline X509_STORE *ClientImpl::create_ca_cert_store(const char *ca_cert,
if (!mem) { return nullptr; } if (!mem) { return nullptr; }
auto inf = PEM_X509_INFO_read_bio(mem, nullptr, nullptr, nullptr); auto inf = PEM_X509_INFO_read_bio(mem, nullptr, nullptr, nullptr);
if (!inf) { if (!inf) { return nullptr; }
return nullptr;
}
auto cts = X509_STORE_new(); auto cts = X509_STORE_new();
if (cts) { if (cts) {
@ -8726,6 +8728,11 @@ inline void ClientImpl::enable_server_certificate_verification(bool enabled) {
inline void ClientImpl::enable_server_hostname_verification(bool enabled) { inline void ClientImpl::enable_server_hostname_verification(bool enabled) {
server_hostname_verification_ = enabled; server_hostname_verification_ = enabled;
} }
inline void ClientImpl::set_server_certificate_verifier(
std::function<bool(SSL *ssl)> verifier) {
server_certificate_verifier_ = verifier;
}
#endif #endif
inline void ClientImpl::set_logger(Logger logger) { inline void ClientImpl::set_logger(Logger logger) {
@ -9311,6 +9318,12 @@ inline bool SSLClient::initialize_ssl(Socket &socket, Error &error) {
} }
if (server_certificate_verification_) { if (server_certificate_verification_) {
if (server_certificate_verifier_) {
if (!server_certificate_verifier_(ssl2)) {
error = Error::SSLServerVerification;
return false;
}
} else {
verify_result_ = SSL_get_verify_result(ssl2); verify_result_ = SSL_get_verify_result(ssl2);
if (verify_result_ != X509_V_OK) { if (verify_result_ != X509_V_OK) {
@ -9333,6 +9346,7 @@ inline bool SSLClient::initialize_ssl(Socket &socket, Error &error) {
} }
} }
} }
}
return true; return true;
}, },
@ -10066,6 +10080,11 @@ inline void Client::enable_server_certificate_verification(bool enabled) {
inline void Client::enable_server_hostname_verification(bool enabled) { inline void Client::enable_server_hostname_verification(bool enabled) {
cli_->enable_server_hostname_verification(enabled); cli_->enable_server_hostname_verification(enabled);
} }
inline void Client::set_server_certificate_verifier(
std::function<bool(SSL *ssl)> verifier) {
cli_->set_server_certificate_verifier(verifier);
}
#endif #endif
inline void Client::set_logger(Logger logger) { inline void Client::set_logger(Logger logger) {