diff --git a/NetSSL_Win/src/SecureSocketImpl.cpp b/NetSSL_Win/src/SecureSocketImpl.cpp index a5e6a3bc6..78f55adb9 100644 --- a/NetSSL_Win/src/SecureSocketImpl.cpp +++ b/NetSSL_Win/src/SecureSocketImpl.cpp @@ -1317,7 +1317,7 @@ void SecureSocketImpl::verifyCertificateChainClient(PCCERT_CONTEXT pServerCert) // Revocation check of the root certificate may fail due to missing CRL points, etc. // We ignore all errors checking the root certificate except CRYPT_E_REVOKED. - if (!ok && (revStat.dwIndex < certs.size() - 1 || revStat.dwError == CRYPT_E_REVOKED)) + if (!ok && revStat.dwIndex < certs.size() - 1 && revStat.dwError == CRYPT_E_REVOKED) { VerificationErrorArgs args(cert, revStat.dwIndex, revStat.dwReason, Utility::formatError(revStat.dwError)); SSLManager::instance().ClientVerificationError(this, args); @@ -1421,7 +1421,10 @@ void SecureSocketImpl::serverVerifyCertificate() CERT_VERIFY_REV_CHAIN_FLAG, NULL, &revStat); - if (!ok && (revStat.dwIndex < certs.size() - 1 || revStat.dwError == CRYPT_E_REVOKED)) + + // Revocation check of the root certificate may fail due to missing CRL points, etc. + // We ignore all errors checking the root certificate except CRYPT_E_REVOKED. + if (!ok && revStat.dwIndex < certs.size() - 1 && revStat.dwError == CRYPT_E_REVOKED) { VerificationErrorArgs args(cert, revStat.dwIndex, revStat.dwReason, Utility::formatError(revStat.dwReason)); SSLManager::instance().ServerVerificationError(this, args); diff --git a/NetSSL_Win/src/X509Certificate.cpp b/NetSSL_Win/src/X509Certificate.cpp index af225701a..c8a9c9fc9 100644 --- a/NetSSL_Win/src/X509Certificate.cpp +++ b/NetSSL_Win/src/X509Certificate.cpp @@ -278,10 +278,14 @@ void X509Certificate::extractNames(std::string& cmnName, std::set& PCERT_ALT_NAME_INFO pNameInfo = reinterpret_cast(buffer.begin()); for (int i = 0; i < pNameInfo->cAltEntry; i++) { - std::wstring waltName(pNameInfo->rgAltEntry[i].pwszDNSName); - std::string altName; - Poco::UnicodeConverter::toUTF8(waltName, altName); - domainNames.insert(altName); + // Some certificates have Subject Alternative Name entries that are not DNS Name. Skip them. + if (pNameInfo->rgAltEntry[i].dwAltNameChoice == CERT_ALT_NAME_DNS_NAME) + { + std::wstring waltName(pNameInfo->rgAltEntry[i].pwszDNSName); + std::string altName; + Poco::UnicodeConverter::toUTF8(waltName, altName); + domainNames.insert(altName); + } } } }