| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/file_path.h" | 5 #include "base/file_path.h" |
| 6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
| 7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
| 8 #include "base/pickle.h" | 8 #include "base/pickle.h" |
| 9 #include "base/sha1.h" | 9 #include "base/sha1.h" |
| 10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 google_cert->GetDNSNames(&dns_names); | 224 google_cert->GetDNSNames(&dns_names); |
| 225 ASSERT_EQ(1U, dns_names.size()); | 225 ASSERT_EQ(1U, dns_names.size()); |
| 226 EXPECT_EQ("www.google.com", dns_names[0]); | 226 EXPECT_EQ("www.google.com", dns_names[0]); |
| 227 | 227 |
| 228 #if TEST_EV | 228 #if TEST_EV |
| 229 // TODO(avi): turn this on for the Mac once EV checking is implemented. | 229 // TODO(avi): turn this on for the Mac once EV checking is implemented. |
| 230 CertVerifyResult verify_result; | 230 CertVerifyResult verify_result; |
| 231 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED | | 231 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED | |
| 232 X509Certificate::VERIFY_EV_CERT; | 232 X509Certificate::VERIFY_EV_CERT; |
| 233 EXPECT_EQ(OK, google_cert->Verify("www.google.com", flags, &verify_result)); | 233 EXPECT_EQ(OK, google_cert->Verify("www.google.com", flags, &verify_result)); |
| 234 EXPECT_EQ(0, verify_result.cert_status & CERT_STATUS_IS_EV); | 234 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_IS_EV); |
| 235 #endif | 235 #endif |
| 236 } | 236 } |
| 237 | 237 |
| 238 TEST(X509CertificateTest, GoogleCertParsing) { | 238 TEST(X509CertificateTest, GoogleCertParsing) { |
| 239 scoped_refptr<X509Certificate> google_cert( | 239 scoped_refptr<X509Certificate> google_cert( |
| 240 X509Certificate::CreateFromBytes( | 240 X509Certificate::CreateFromBytes( |
| 241 reinterpret_cast<const char*>(google_der), sizeof(google_der))); | 241 reinterpret_cast<const char*>(google_der), sizeof(google_der))); |
| 242 | 242 |
| 243 CheckGoogleCert(google_cert, google_fingerprint, | 243 CheckGoogleCert(google_cert, google_fingerprint, |
| 244 1238192407, // Mar 27 22:20:07 2009 GMT | 244 1238192407, // Mar 27 22:20:07 2009 GMT |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 webkit_cert->GetDNSNames(&dns_names); | 290 webkit_cert->GetDNSNames(&dns_names); |
| 291 ASSERT_EQ(2U, dns_names.size()); | 291 ASSERT_EQ(2U, dns_names.size()); |
| 292 EXPECT_EQ("*.webkit.org", dns_names[0]); | 292 EXPECT_EQ("*.webkit.org", dns_names[0]); |
| 293 EXPECT_EQ("webkit.org", dns_names[1]); | 293 EXPECT_EQ("webkit.org", dns_names[1]); |
| 294 | 294 |
| 295 #if TEST_EV | 295 #if TEST_EV |
| 296 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED | | 296 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED | |
| 297 X509Certificate::VERIFY_EV_CERT; | 297 X509Certificate::VERIFY_EV_CERT; |
| 298 CertVerifyResult verify_result; | 298 CertVerifyResult verify_result; |
| 299 EXPECT_EQ(OK, webkit_cert->Verify("webkit.org", flags, &verify_result)); | 299 EXPECT_EQ(OK, webkit_cert->Verify("webkit.org", flags, &verify_result)); |
| 300 EXPECT_EQ(0, verify_result.cert_status & CERT_STATUS_IS_EV); | 300 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_IS_EV); |
| 301 #endif | 301 #endif |
| 302 | 302 |
| 303 // Test that the wildcard cert matches properly. | 303 // Test that the wildcard cert matches properly. |
| 304 EXPECT_TRUE(webkit_cert->VerifyNameMatch("www.webkit.org")); | 304 EXPECT_TRUE(webkit_cert->VerifyNameMatch("www.webkit.org")); |
| 305 EXPECT_TRUE(webkit_cert->VerifyNameMatch("foo.webkit.org")); | 305 EXPECT_TRUE(webkit_cert->VerifyNameMatch("foo.webkit.org")); |
| 306 EXPECT_TRUE(webkit_cert->VerifyNameMatch("webkit.org")); | 306 EXPECT_TRUE(webkit_cert->VerifyNameMatch("webkit.org")); |
| 307 EXPECT_FALSE(webkit_cert->VerifyNameMatch("www.webkit.com")); | 307 EXPECT_FALSE(webkit_cert->VerifyNameMatch("www.webkit.com")); |
| 308 EXPECT_FALSE(webkit_cert->VerifyNameMatch("www.foo.webkit.com")); | 308 EXPECT_FALSE(webkit_cert->VerifyNameMatch("www.foo.webkit.com")); |
| 309 } | 309 } |
| 310 | 310 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 thawte_cert->GetDNSNames(&dns_names); | 353 thawte_cert->GetDNSNames(&dns_names); |
| 354 ASSERT_EQ(1U, dns_names.size()); | 354 ASSERT_EQ(1U, dns_names.size()); |
| 355 EXPECT_EQ("www.thawte.com", dns_names[0]); | 355 EXPECT_EQ("www.thawte.com", dns_names[0]); |
| 356 | 356 |
| 357 #if TEST_EV | 357 #if TEST_EV |
| 358 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED | | 358 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED | |
| 359 X509Certificate::VERIFY_EV_CERT; | 359 X509Certificate::VERIFY_EV_CERT; |
| 360 CertVerifyResult verify_result; | 360 CertVerifyResult verify_result; |
| 361 // EV cert verification requires revocation checking. | 361 // EV cert verification requires revocation checking. |
| 362 EXPECT_EQ(OK, thawte_cert->Verify("www.thawte.com", flags, &verify_result)); | 362 EXPECT_EQ(OK, thawte_cert->Verify("www.thawte.com", flags, &verify_result)); |
| 363 EXPECT_NE(0, verify_result.cert_status & CERT_STATUS_IS_EV); | 363 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_IS_EV); |
| 364 // Consequently, if we don't have revocation checking enabled, we can't claim | 364 // Consequently, if we don't have revocation checking enabled, we can't claim |
| 365 // any cert is EV. | 365 // any cert is EV. |
| 366 flags = X509Certificate::VERIFY_EV_CERT; | 366 flags = X509Certificate::VERIFY_EV_CERT; |
| 367 EXPECT_EQ(OK, thawte_cert->Verify("www.thawte.com", flags, &verify_result)); | 367 EXPECT_EQ(OK, thawte_cert->Verify("www.thawte.com", flags, &verify_result)); |
| 368 EXPECT_EQ(0, verify_result.cert_status & CERT_STATUS_IS_EV); | 368 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_IS_EV); |
| 369 #endif | 369 #endif |
| 370 } | 370 } |
| 371 | 371 |
| 372 TEST(X509CertificateTest, PaypalNullCertParsing) { | 372 TEST(X509CertificateTest, PaypalNullCertParsing) { |
| 373 scoped_refptr<X509Certificate> paypal_null_cert( | 373 scoped_refptr<X509Certificate> paypal_null_cert( |
| 374 X509Certificate::CreateFromBytes( | 374 X509Certificate::CreateFromBytes( |
| 375 reinterpret_cast<const char*>(paypal_null_der), | 375 reinterpret_cast<const char*>(paypal_null_der), |
| 376 sizeof(paypal_null_der))); | 376 sizeof(paypal_null_der))); |
| 377 | 377 |
| 378 ASSERT_NE(static_cast<X509Certificate*>(NULL), paypal_null_cert); | 378 ASSERT_NE(static_cast<X509Certificate*>(NULL), paypal_null_cert); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 390 // TOOD(bulach): investigate why macosx and win aren't returning | 390 // TOOD(bulach): investigate why macosx and win aren't returning |
| 391 // ERR_CERT_INVALID or ERR_CERT_COMMON_NAME_INVALID. | 391 // ERR_CERT_INVALID or ERR_CERT_COMMON_NAME_INVALID. |
| 392 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); | 392 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); |
| 393 #else | 393 #else |
| 394 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); | 394 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); |
| 395 #endif | 395 #endif |
| 396 // Either the system crypto library should correctly report a certificate | 396 // Either the system crypto library should correctly report a certificate |
| 397 // name mismatch, or our certificate blacklist should cause us to report an | 397 // name mismatch, or our certificate blacklist should cause us to report an |
| 398 // invalid certificate. | 398 // invalid certificate. |
| 399 #if !defined(OS_MACOSX) && !defined(USE_OPENSSL) | 399 #if !defined(OS_MACOSX) && !defined(USE_OPENSSL) |
| 400 EXPECT_NE(0, verify_result.cert_status & | 400 EXPECT_TRUE(verify_result.cert_status & |
| 401 (CERT_STATUS_COMMON_NAME_INVALID | CERT_STATUS_INVALID)); | 401 (CERT_STATUS_COMMON_NAME_INVALID | CERT_STATUS_INVALID)); |
| 402 #endif | 402 #endif |
| 403 } | 403 } |
| 404 | 404 |
| 405 // A certificate whose AIA extension contains an LDAP URL without a host name. | 405 // A certificate whose AIA extension contains an LDAP URL without a host name. |
| 406 // This certificate will expire on 2011-09-08. | 406 // This certificate will expire on 2011-09-08. |
| 407 TEST(X509CertificateTest, UnoSoftCertParsing) { | 407 TEST(X509CertificateTest, UnoSoftCertParsing) { |
| 408 FilePath certs_dir = GetTestCertsDirectory(); | 408 FilePath certs_dir = GetTestCertsDirectory(); |
| 409 scoped_refptr<X509Certificate> unosoft_hu_cert( | 409 scoped_refptr<X509Certificate> unosoft_hu_cert( |
| 410 ImportCertFromFile(certs_dir, "unosoft_hu_cert.der")); | 410 ImportCertFromFile(certs_dir, "unosoft_hu_cert.der")); |
| 411 | 411 |
| 412 ASSERT_NE(static_cast<X509Certificate*>(NULL), unosoft_hu_cert); | 412 ASSERT_NE(static_cast<X509Certificate*>(NULL), unosoft_hu_cert); |
| 413 | 413 |
| 414 const SHA1Fingerprint& fingerprint = | 414 const SHA1Fingerprint& fingerprint = |
| 415 unosoft_hu_cert->fingerprint(); | 415 unosoft_hu_cert->fingerprint(); |
| 416 for (size_t i = 0; i < 20; ++i) | 416 for (size_t i = 0; i < 20; ++i) |
| 417 EXPECT_EQ(unosoft_hu_fingerprint[i], fingerprint.data[i]); | 417 EXPECT_EQ(unosoft_hu_fingerprint[i], fingerprint.data[i]); |
| 418 | 418 |
| 419 int flags = 0; | 419 int flags = 0; |
| 420 CertVerifyResult verify_result; | 420 CertVerifyResult verify_result; |
| 421 int error = unosoft_hu_cert->Verify("www.unosoft.hu", flags, | 421 int error = unosoft_hu_cert->Verify("www.unosoft.hu", flags, |
| 422 &verify_result); | 422 &verify_result); |
| 423 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); | 423 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); |
| 424 EXPECT_NE(0, verify_result.cert_status & CERT_STATUS_AUTHORITY_INVALID); | 424 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_AUTHORITY_INVALID); |
| 425 } | 425 } |
| 426 | 426 |
| 427 TEST(X509CertificateTest, SerialNumbers) { | 427 TEST(X509CertificateTest, SerialNumbers) { |
| 428 scoped_refptr<X509Certificate> google_cert( | 428 scoped_refptr<X509Certificate> google_cert( |
| 429 X509Certificate::CreateFromBytes( | 429 X509Certificate::CreateFromBytes( |
| 430 reinterpret_cast<const char*>(google_der), sizeof(google_der))); | 430 reinterpret_cast<const char*>(google_der), sizeof(google_der))); |
| 431 | 431 |
| 432 static const uint8 google_serial[16] = { | 432 static const uint8 google_serial[16] = { |
| 433 0x01,0x2a,0x39,0x76,0x0d,0x3f,0x4f,0xc9, | 433 0x01,0x2a,0x39,0x76,0x0d,0x3f,0x4f,0xc9, |
| 434 0x0b,0xe7,0xbd,0x2b,0xcf,0x95,0x2e,0x7a, | 434 0x0b,0xe7,0xbd,0x2b,0xcf,0x95,0x2e,0x7a, |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 X509Certificate::OSCertHandles intermediates; | 474 X509Certificate::OSCertHandles intermediates; |
| 475 intermediates.push_back(intermediate_cert->os_cert_handle()); | 475 intermediates.push_back(intermediate_cert->os_cert_handle()); |
| 476 scoped_refptr<X509Certificate> cert_chain = | 476 scoped_refptr<X509Certificate> cert_chain = |
| 477 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), | 477 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), |
| 478 intermediates); | 478 intermediates); |
| 479 | 479 |
| 480 int flags = 0; | 480 int flags = 0; |
| 481 CertVerifyResult verify_result; | 481 CertVerifyResult verify_result; |
| 482 int error = cert_chain->Verify("www.us.army.mil", flags, &verify_result); | 482 int error = cert_chain->Verify("www.us.army.mil", flags, &verify_result); |
| 483 EXPECT_EQ(OK, error); | 483 EXPECT_EQ(OK, error); |
| 484 EXPECT_EQ(0, verify_result.cert_status); | 484 EXPECT_EQ(CERT_STATUS_NO_ERROR, verify_result.cert_status); |
| 485 root_certs->Clear(); | 485 root_certs->Clear(); |
| 486 } | 486 } |
| 487 | 487 |
| 488 // Test for bug 58437. | 488 // Test for bug 58437. |
| 489 // This certificate will expire on 2011-12-21. The test will still | 489 // This certificate will expire on 2011-12-21. The test will still |
| 490 // pass if error == ERR_CERT_DATE_INVALID. | 490 // pass if error == ERR_CERT_DATE_INVALID. |
| 491 // This test is DISABLED because it appears that we cannot do | 491 // This test is DISABLED because it appears that we cannot do |
| 492 // certificate revocation checking when running all of the net unit tests. | 492 // certificate revocation checking when running all of the net unit tests. |
| 493 // This test passes when run individually, but when run with all of the net | 493 // This test passes when run individually, but when run with all of the net |
| 494 // unit tests, the call to PKIXVerifyCert returns the NSS error -8180, which is | 494 // unit tests, the call to PKIXVerifyCert returns the NSS error -8180, which is |
| (...skipping 14 matching lines...) Expand all Loading... |
| 509 intermediates.push_back(intermediate_cert->os_cert_handle()); | 509 intermediates.push_back(intermediate_cert->os_cert_handle()); |
| 510 scoped_refptr<X509Certificate> cert_chain = | 510 scoped_refptr<X509Certificate> cert_chain = |
| 511 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), | 511 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), |
| 512 intermediates); | 512 intermediates); |
| 513 | 513 |
| 514 CertVerifyResult verify_result; | 514 CertVerifyResult verify_result; |
| 515 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED | | 515 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED | |
| 516 X509Certificate::VERIFY_EV_CERT; | 516 X509Certificate::VERIFY_EV_CERT; |
| 517 int error = cert_chain->Verify("2029.globalsign.com", flags, &verify_result); | 517 int error = cert_chain->Verify("2029.globalsign.com", flags, &verify_result); |
| 518 if (error == OK) | 518 if (error == OK) |
| 519 EXPECT_NE(0, verify_result.cert_status & CERT_STATUS_IS_EV); | 519 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_IS_EV); |
| 520 else | 520 else |
| 521 EXPECT_EQ(ERR_CERT_DATE_INVALID, error); | 521 EXPECT_EQ(ERR_CERT_DATE_INVALID, error); |
| 522 } | 522 } |
| 523 | 523 |
| 524 TEST(X509CertificateTest, TestKnownRoot) { | 524 TEST(X509CertificateTest, TestKnownRoot) { |
| 525 FilePath certs_dir = GetTestCertsDirectory(); | 525 FilePath certs_dir = GetTestCertsDirectory(); |
| 526 scoped_refptr<X509Certificate> cert = | 526 scoped_refptr<X509Certificate> cert = |
| 527 ImportCertFromFile(certs_dir, "nist.der"); | 527 ImportCertFromFile(certs_dir, "nist.der"); |
| 528 ASSERT_NE(static_cast<X509Certificate*>(NULL), cert); | 528 ASSERT_NE(static_cast<X509Certificate*>(NULL), cert); |
| 529 | 529 |
| 530 // This intermediate is only needed for old Linux machines. Modern NSS | 530 // This intermediate is only needed for old Linux machines. Modern NSS |
| 531 // includes it as a root already. | 531 // includes it as a root already. |
| 532 scoped_refptr<X509Certificate> intermediate_cert = | 532 scoped_refptr<X509Certificate> intermediate_cert = |
| 533 ImportCertFromFile(certs_dir, "nist_intermediate.der"); | 533 ImportCertFromFile(certs_dir, "nist_intermediate.der"); |
| 534 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); | 534 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); |
| 535 | 535 |
| 536 X509Certificate::OSCertHandles intermediates; | 536 X509Certificate::OSCertHandles intermediates; |
| 537 intermediates.push_back(intermediate_cert->os_cert_handle()); | 537 intermediates.push_back(intermediate_cert->os_cert_handle()); |
| 538 scoped_refptr<X509Certificate> cert_chain = | 538 scoped_refptr<X509Certificate> cert_chain = |
| 539 X509Certificate::CreateFromHandle(cert->os_cert_handle(), | 539 X509Certificate::CreateFromHandle(cert->os_cert_handle(), |
| 540 intermediates); | 540 intermediates); |
| 541 | 541 |
| 542 int flags = 0; | 542 int flags = 0; |
| 543 CertVerifyResult verify_result; | 543 CertVerifyResult verify_result; |
| 544 // This is going to blow up in Feb 2012. Sorry! Disable and file a bug | 544 // This is going to blow up in Feb 2012. Sorry! Disable and file a bug |
| 545 // against agl. Also see PublicKeyHashes in this file. | 545 // against agl. Also see PublicKeyHashes in this file. |
| 546 int error = cert_chain->Verify("www.nist.gov", flags, &verify_result); | 546 int error = cert_chain->Verify("www.nist.gov", flags, &verify_result); |
| 547 EXPECT_EQ(OK, error); | 547 EXPECT_EQ(OK, error); |
| 548 EXPECT_EQ(0, verify_result.cert_status); | 548 EXPECT_EQ(CERT_STATUS_NO_ERROR, verify_result.cert_status); |
| 549 EXPECT_TRUE(verify_result.is_issued_by_known_root); | 549 EXPECT_TRUE(verify_result.is_issued_by_known_root); |
| 550 } | 550 } |
| 551 | 551 |
| 552 // This is the SHA1 hash of the SubjectPublicKeyInfo of nist.der. | 552 // This is the SHA1 hash of the SubjectPublicKeyInfo of nist.der. |
| 553 static const char nistSPKIHash[] = | 553 static const char nistSPKIHash[] = |
| 554 "\x15\x60\xde\x65\x4e\x03\x9f\xd0\x08\x82" | 554 "\x15\x60\xde\x65\x4e\x03\x9f\xd0\x08\x82" |
| 555 "\xa9\x6a\xc4\x65\x8e\x6f\x92\x06\x84\x35"; | 555 "\xa9\x6a\xc4\x65\x8e\x6f\x92\x06\x84\x35"; |
| 556 | 556 |
| 557 TEST(X509CertificateTest, ExtractSPKIFromDERCert) { | 557 TEST(X509CertificateTest, ExtractSPKIFromDERCert) { |
| 558 FilePath certs_dir = GetTestCertsDirectory(); | 558 FilePath certs_dir = GetTestCertsDirectory(); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 intermediates.push_back(intermediate_cert->os_cert_handle()); | 612 intermediates.push_back(intermediate_cert->os_cert_handle()); |
| 613 scoped_refptr<X509Certificate> cert_chain = | 613 scoped_refptr<X509Certificate> cert_chain = |
| 614 X509Certificate::CreateFromHandle(cert->os_cert_handle(), | 614 X509Certificate::CreateFromHandle(cert->os_cert_handle(), |
| 615 intermediates); | 615 intermediates); |
| 616 | 616 |
| 617 int flags = 0; | 617 int flags = 0; |
| 618 CertVerifyResult verify_result; | 618 CertVerifyResult verify_result; |
| 619 | 619 |
| 620 int error = cert_chain->Verify("www.nist.gov", flags, &verify_result); | 620 int error = cert_chain->Verify("www.nist.gov", flags, &verify_result); |
| 621 EXPECT_EQ(OK, error); | 621 EXPECT_EQ(OK, error); |
| 622 EXPECT_EQ(0, verify_result.cert_status); | 622 EXPECT_EQ(CERT_STATUS_NO_ERROR, verify_result.cert_status); |
| 623 ASSERT_LE(2u, verify_result.public_key_hashes.size()); | 623 ASSERT_LE(2u, verify_result.public_key_hashes.size()); |
| 624 EXPECT_EQ(HexEncode(nistSPKIHash, base::SHA1_LENGTH), | 624 EXPECT_EQ(HexEncode(nistSPKIHash, base::SHA1_LENGTH), |
| 625 HexEncode(verify_result.public_key_hashes[0].data, SHA1_LENGTH)); | 625 HexEncode(verify_result.public_key_hashes[0].data, SHA1_LENGTH)); |
| 626 EXPECT_EQ("83244223D6CBF0A26FC7DE27CEBCA4BDA32612AD", | 626 EXPECT_EQ("83244223D6CBF0A26FC7DE27CEBCA4BDA32612AD", |
| 627 HexEncode(verify_result.public_key_hashes[1].data, SHA1_LENGTH)); | 627 HexEncode(verify_result.public_key_hashes[1].data, SHA1_LENGTH)); |
| 628 | 628 |
| 629 TestRootCerts::GetInstance()->Clear(); | 629 TestRootCerts::GetInstance()->Clear(); |
| 630 } | 630 } |
| 631 | 631 |
| 632 // A regression test for http://crbug.com/70293. | 632 // A regression test for http://crbug.com/70293. |
| 633 // The Key Usage extension in this RSA SSL server certificate does not have | 633 // The Key Usage extension in this RSA SSL server certificate does not have |
| 634 // the keyEncipherment bit. | 634 // the keyEncipherment bit. |
| 635 TEST(X509CertificateTest, InvalidKeyUsage) { | 635 TEST(X509CertificateTest, InvalidKeyUsage) { |
| 636 FilePath certs_dir = GetTestCertsDirectory(); | 636 FilePath certs_dir = GetTestCertsDirectory(); |
| 637 | 637 |
| 638 scoped_refptr<X509Certificate> server_cert = | 638 scoped_refptr<X509Certificate> server_cert = |
| 639 ImportCertFromFile(certs_dir, "invalid_key_usage_cert.der"); | 639 ImportCertFromFile(certs_dir, "invalid_key_usage_cert.der"); |
| 640 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); | 640 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); |
| 641 | 641 |
| 642 int flags = 0; | 642 int flags = 0; |
| 643 CertVerifyResult verify_result; | 643 CertVerifyResult verify_result; |
| 644 int error = server_cert->Verify("jira.aquameta.com", flags, &verify_result); | 644 int error = server_cert->Verify("jira.aquameta.com", flags, &verify_result); |
| 645 #if defined(USE_OPENSSL) | 645 #if defined(USE_OPENSSL) |
| 646 // This certificate has two errors: "invalid key usage" and "untrusted CA". | 646 // This certificate has two errors: "invalid key usage" and "untrusted CA". |
| 647 // However, OpenSSL returns only one (the latter), and we can't detect | 647 // However, OpenSSL returns only one (the latter), and we can't detect |
| 648 // the other errors. | 648 // the other errors. |
| 649 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); | 649 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); |
| 650 #else | 650 #else |
| 651 EXPECT_EQ(ERR_CERT_INVALID, error); | 651 EXPECT_EQ(ERR_CERT_INVALID, error); |
| 652 EXPECT_NE(0, verify_result.cert_status & CERT_STATUS_INVALID); | 652 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_INVALID); |
| 653 #endif | 653 #endif |
| 654 // TODO(wtc): fix http://crbug.com/75520 to get all the certificate errors | 654 // TODO(wtc): fix http://crbug.com/75520 to get all the certificate errors |
| 655 // from NSS. | 655 // from NSS. |
| 656 #if !defined(USE_NSS) | 656 #if !defined(USE_NSS) |
| 657 // The certificate is issued by an unknown CA. | 657 // The certificate is issued by an unknown CA. |
| 658 EXPECT_NE(0, verify_result.cert_status & CERT_STATUS_AUTHORITY_INVALID); | 658 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_AUTHORITY_INVALID); |
| 659 #endif | 659 #endif |
| 660 } | 660 } |
| 661 | 661 |
| 662 // Tests X509CertificateCache via X509Certificate::CreateFromHandle. We | 662 // Tests X509CertificateCache via X509Certificate::CreateFromHandle. We |
| 663 // call X509Certificate::CreateFromHandle several times and observe whether | 663 // call X509Certificate::CreateFromHandle several times and observe whether |
| 664 // it returns a cached or new OSCertHandle. | 664 // it returns a cached or new OSCertHandle. |
| 665 TEST(X509CertificateTest, Cache) { | 665 TEST(X509CertificateTest, Cache) { |
| 666 X509Certificate::OSCertHandle google_cert_handle; | 666 X509Certificate::OSCertHandle google_cert_handle; |
| 667 X509Certificate::OSCertHandle thawte_cert_handle; | 667 X509Certificate::OSCertHandle thawte_cert_handle; |
| 668 | 668 |
| (...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1373 } | 1373 } |
| 1374 | 1374 |
| 1375 EXPECT_EQ(test_data.expected, X509Certificate::VerifyHostname( | 1375 EXPECT_EQ(test_data.expected, X509Certificate::VerifyHostname( |
| 1376 test_data.hostname, common_name, dns_names, ip_addressses)); | 1376 test_data.hostname, common_name, dns_names, ip_addressses)); |
| 1377 } | 1377 } |
| 1378 | 1378 |
| 1379 INSTANTIATE_TEST_CASE_P(, X509CertificateNameVerifyTest, | 1379 INSTANTIATE_TEST_CASE_P(, X509CertificateNameVerifyTest, |
| 1380 testing::ValuesIn(kNameVerifyTestData)); | 1380 testing::ValuesIn(kNameVerifyTestData)); |
| 1381 | 1381 |
| 1382 } // namespace net | 1382 } // namespace net |
| OLD | NEW |