summaryrefslogtreecommitdiffstats
path: root/net/base
diff options
context:
space:
mode:
authorbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-21 11:00:56 +0000
committerbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-21 11:00:56 +0000
commit36d086db68f73c439e594d22d3276cb1a0eae4f6 (patch)
tree6c7262e60cfa777f72e51b1210decb109e2347fd /net/base
parent7a29b34c138135c001d2c0259d938429c43b691d (diff)
downloadchromium_src-36d086db68f73c439e594d22d3276cb1a0eae4f6.zip
chromium_src-36d086db68f73c439e594d22d3276cb1a0eae4f6.tar.gz
chromium_src-36d086db68f73c439e594d22d3276cb1a0eae4f6.tar.bz2
Fixes X509CertificateTest.SerialNumbers for USE_OPENSSL.
(followup on r78478) BUG=none TEST=X509CertificateTest.SerialNumbers Review URL: http://codereview.chromium.org/6708027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@78869 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base')
-rw-r--r--net/base/x509_certificate_openssl.cc16
-rw-r--r--net/base/x509_certificate_unittest.cc2
2 files changed, 17 insertions, 1 deletions
diff --git a/net/base/x509_certificate_openssl.cc b/net/base/x509_certificate_openssl.cc
index cd3fba7..6e82300 100644
--- a/net/base/x509_certificate_openssl.cc
+++ b/net/base/x509_certificate_openssl.cc
@@ -310,6 +310,17 @@ void X509Certificate::FreeOSCertHandle(OSCertHandle cert_handle) {
void X509Certificate::Initialize() {
base::EnsureOpenSSLInit();
fingerprint_ = CalculateFingerprint(cert_handle_);
+
+ ASN1_INTEGER* num = X509_get_serialNumber(cert_handle_);
+ if (num) {
+ serial_number_ = std::string(
+ reinterpret_cast<char*>(num->data),
+ num->length);
+ // Remove leading zeros.
+ while (serial_number_.size() > 1 && serial_number_[0] == 0)
+ serial_number_ = serial_number_.substr(1, serial_number_.size() - 1);
+ }
+
ParsePrincipal(cert_handle_, X509_get_subject_name(cert_handle_), &subject_);
ParsePrincipal(cert_handle_, X509_get_issuer_name(cert_handle_), &issuer_);
nxou::ParseDate(X509_get_notBefore(cert_handle_), &valid_start_);
@@ -420,6 +431,11 @@ int X509Certificate::Verify(const std::string& hostname,
CertVerifyResult* verify_result) const {
verify_result->Reset();
+ if (IsBlacklisted()) {
+ verify_result->cert_status |= CERT_STATUS_REVOKED;
+ return ERR_CERT_REVOKED;
+ }
+
// TODO(joth): We should fetch the subjectAltNames directly rather than via
// GetDNSNames, so we can apply special handling for IP addresses vs DNS
// names, etc. See http://crbug.com/62973.
diff --git a/net/base/x509_certificate_unittest.cc b/net/base/x509_certificate_unittest.cc
index 5572630..f8ededc 100644
--- a/net/base/x509_certificate_unittest.cc
+++ b/net/base/x509_certificate_unittest.cc
@@ -383,7 +383,7 @@ TEST(X509CertificateTest, PaypalNullCertParsing) {
&verify_result);
#if defined(USE_OPENSSL) || defined(OS_MACOSX) || defined(OS_WIN)
// TOOD(bulach): investigate why macosx and win aren't returning
- // ERR_CERT_INVALID.
+ // ERR_CERT_INVALID or ERR_CERT_COMMON_NAME_INVALID.
EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error);
#else
EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error);