Issue1431 (#1926)
* 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:
parent
82fcbe3901
commit
e612154694
25
httplib.h
25
httplib.h
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user