summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSpencer Jackson <spencer.jackson@mongodb.com>2015-08-31 17:29:35 -0400
committerRamon Fernandez <ramon.fernandez@mongodb.com>2015-09-23 18:30:34 -0400
commited7d08187adc2f84574e16b0c9149d886b6e14a6 (patch)
tree5079d513268e9ed30cbc64b00e3e20a6b0b9eca4
parent5da060573aebc32303b9ab72bbea7a552dcfcf06 (diff)
downloadmongo-ed7d08187adc2f84574e16b0c9149d886b6e14a6.tar.gz
SERVER-17120 Check existance of CN in X509 subject
(cherry picked from commit fadaf9680288070439ed9a9ed4ed847a33209493)
-rw-r--r--src/mongo/util/net/ssl_manager.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/mongo/util/net/ssl_manager.cpp b/src/mongo/util/net/ssl_manager.cpp
index 4b48d303642..5caf871cb47 100644
--- a/src/mongo/util/net/ssl_manager.cpp
+++ b/src/mongo/util/net/ssl_manager.cpp
@@ -998,12 +998,15 @@ std::string SSLManager::parseAndValidatePeerCertificate(const SSLConnection* con
sk_GENERAL_NAME_pop_free(sanNames, GENERAL_NAME_free);
} else {
// If Subject Alternate Name (SAN) didn't exist, check Common Name (CN).
- int cnBegin = peerSubjectName.find("CN=") + 3;
- int cnEnd = peerSubjectName.find(",", cnBegin);
- std::string commonName = peerSubjectName.substr(cnBegin, cnEnd - cnBegin);
+ size_t cnBegin = peerSubjectName.find("CN=");
+ if (cnBegin != std::string::npos) {
+ size_t cnEnd = peerSubjectName.find(",", cnBegin);
+ if (cnEnd != std::string::npos) {
+ cnEnd = cnEnd - cnBegin;
+ }
+ std::string commonName = peerSubjectName.substr(cnBegin + 3, cnEnd);
- if (_hostNameMatch(remoteHost.c_str(), commonName.c_str())) {
- cnMatch = true;
+ cnMatch = _hostNameMatch(remoteHost.c_str(), commonName.c_str());
}
}