diff --git a/folly/ssl/OpenSSLCertUtils.cpp b/folly/ssl/OpenSSLCertUtils.cpp index 1a1e5daff89..523c299c24a 100644 --- a/folly/ssl/OpenSSLCertUtils.cpp +++ b/folly/ssl/OpenSSLCertUtils.cpp @@ -72,20 +72,17 @@ std::string getExtData(X509_EXTENSION* extension) { return asnValue ? asn1ToString(asnValue) : std::string(); } -} // namespace - -Optional OpenSSLCertUtils::getCommonName(X509& x509) { - auto subject = X509_get_subject_name(&x509); - if (!subject) { +Optional commonName(X509_NAME* name) { + if (!name) { return none; } - auto cnLoc = X509_NAME_get_index_by_NID(subject, NID_commonName, -1); + auto cnLoc = X509_NAME_get_index_by_NID(name, NID_commonName, -1); if (cnLoc < 0) { return none; } - auto cnEntry = X509_NAME_get_entry(subject, cnLoc); + auto cnEntry = X509_NAME_get_entry(name, cnLoc); if (!cnEntry) { return none; } @@ -104,6 +101,16 @@ Optional OpenSSLCertUtils::getCommonName(X509& x509) { return Optional(std::string(cnData, cnLen)); } +} // namespace + +Optional OpenSSLCertUtils::getCommonName(X509& x509) { + return commonName(X509_get_subject_name(&x509)); +} + +Optional OpenSSLCertUtils::getIssuerCommonName(X509& x509) { + return commonName(X509_get_issuer_name(&x509)); +} + std::vector OpenSSLCertUtils::getSubjectAltNames(X509& x509) { auto names = reinterpret_cast( X509_get_ext_d2i(&x509, NID_subject_alt_name, nullptr, nullptr)); diff --git a/folly/ssl/OpenSSLCertUtils.h b/folly/ssl/OpenSSLCertUtils.h index 623cc023d60..b4ce5259632 100644 --- a/folly/ssl/OpenSSLCertUtils.h +++ b/folly/ssl/OpenSSLCertUtils.h @@ -35,6 +35,8 @@ class OpenSSLCertUtils { // Note: non-const until OpenSSL 1.1.0 static Optional getCommonName(X509& x509); + static Optional getIssuerCommonName(X509& x509); + static std::vector getSubjectAltNames(X509& x509); /* diff --git a/folly/ssl/test/OpenSSLCertUtilsTest.cpp b/folly/ssl/test/OpenSSLCertUtilsTest.cpp index 6221e341658..83789139228 100644 --- a/folly/ssl/test/OpenSSLCertUtilsTest.cpp +++ b/folly/ssl/test/OpenSSLCertUtilsTest.cpp @@ -233,6 +233,8 @@ TEST_P(OpenSSLCertUtilsTest, TestX509CN) { EXPECT_NE(x509, nullptr); auto cn = folly::ssl::OpenSSLCertUtils::getCommonName(*x509); EXPECT_EQ(cn.value(), "Asox Company"); + auto issuerCn = folly::ssl::OpenSSLCertUtils::getIssuerCommonName(*x509); + EXPECT_EQ(issuerCn.value(), "Thrift Certificate Authority"); auto sans = folly::ssl::OpenSSLCertUtils::getSubjectAltNames(*x509); EXPECT_EQ(sans.size(), 0); }