diff --git a/noson/src/private/securesocket.cpp b/noson/src/private/securesocket.cpp index c3efdf9..c2fc2db 100644 --- a/noson/src/private/securesocket.cpp +++ b/noson/src/private/securesocket.cpp @@ -24,6 +24,7 @@ #include "cppdef.h" #include +#include #ifdef __WINDOWS__ #include @@ -302,17 +303,20 @@ bool SecureSocket::IsValid() const bool SecureSocket::IsCertificateValid(std::string& str) { - if (m_cert) - X509_free(static_cast(m_cert)); - m_cert = SSL_get_peer_certificate(static_cast(m_ssl)); - if (m_cert) + if (SSL_get_verify_result(static_cast(m_ssl)) == X509_V_OK) { - char buf[80]; - // X509_get_subject_name() returns the subject name of certificate x. - // The returned value is an internal pointer which MUST NOT be freed. - X509_NAME* name = X509_get_subject_name(static_cast(m_cert)); - str.assign(X509_NAME_oneline(name, buf, sizeof(buf) - 1)); - return true; + if (m_cert) + X509_free(static_cast(m_cert)); + m_cert = SSL_get_peer_certificate(static_cast(m_ssl)); + if (m_cert) + { + char buf[80]; + // X509_get_subject_name() returns the subject name of certificate x. + // The returned value is an internal pointer which MUST NOT be freed. + X509_NAME* name = X509_get_subject_name(static_cast(m_cert)); + str.assign(X509_NAME_oneline(name, buf, sizeof(buf) - 1)); + return true; + } } return false; }