OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/base/cert_verify_proc_nss.h" | 5 #include "net/base/cert_verify_proc_nss.h" |
6 | 6 |
7 #include <cert.h> | 7 #include <cert.h> |
8 #include <nss.h> | 8 #include <nss.h> |
9 #include <prerror.h> | 9 #include <prerror.h> |
10 #include <secerr.h> | 10 #include <secerr.h> |
11 #include <sechash.h> | 11 #include <sechash.h> |
12 #include <sslerr.h> | 12 #include <sslerr.h> |
13 | 13 |
14 #include "base/logging.h" | 14 #include "base/logging.h" |
15 #include "crypto/nss_util.h" | 15 #include "crypto/nss_util.h" |
16 #include "crypto/scoped_nss_types.h" | 16 #include "crypto/scoped_nss_types.h" |
17 #include "crypto/sha2.h" | 17 #include "crypto/sha2.h" |
18 #include "net/base/asn1_util.h" | 18 #include "net/base/asn1_util.h" |
19 #include "net/base/cert_status_flags.h" | 19 #include "net/base/cert_status_flags.h" |
| 20 #include "net/base/cert_verifier.h" |
20 #include "net/base/cert_verify_result.h" | 21 #include "net/base/cert_verify_result.h" |
21 #include "net/base/crl_set.h" | 22 #include "net/base/crl_set.h" |
22 #include "net/base/ev_root_ca_metadata.h" | 23 #include "net/base/ev_root_ca_metadata.h" |
23 #include "net/base/net_errors.h" | 24 #include "net/base/net_errors.h" |
24 #include "net/base/x509_certificate.h" | 25 #include "net/base/x509_certificate.h" |
25 #include "net/base/x509_util_nss.h" | 26 #include "net/base/x509_util_nss.h" |
26 | 27 |
27 namespace net { | 28 namespace net { |
28 | 29 |
29 namespace { | 30 namespace { |
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 int cvout_cert_list_index = cvout_index; | 635 int cvout_cert_list_index = cvout_index; |
635 cvout_index++; | 636 cvout_index++; |
636 cvout[cvout_index].type = cert_po_trustAnchor; | 637 cvout[cvout_index].type = cert_po_trustAnchor; |
637 cvout[cvout_index].value.pointer.cert = NULL; | 638 cvout[cvout_index].value.pointer.cert = NULL; |
638 int cvout_trust_anchor_index = cvout_index; | 639 int cvout_trust_anchor_index = cvout_index; |
639 cvout_index++; | 640 cvout_index++; |
640 cvout[cvout_index].type = cert_po_end; | 641 cvout[cvout_index].type = cert_po_end; |
641 ScopedCERTValOutParam scoped_cvout(cvout); | 642 ScopedCERTValOutParam scoped_cvout(cvout); |
642 | 643 |
643 bool rev_checking_enabled = | 644 bool rev_checking_enabled = |
644 (flags & X509Certificate::VERIFY_REV_CHECKING_ENABLED) || | 645 (flags & CertVerifier::VERIFY_REV_CHECKING_ENABLED) || |
645 (flags & X509Certificate::VERIFY_REV_CHECKING_ENABLED_EV_ONLY); | 646 (flags & CertVerifier::VERIFY_REV_CHECKING_ENABLED_EV_ONLY); |
646 | 647 |
647 SECStatus status = PKIXVerifyCert( | 648 SECStatus status = PKIXVerifyCert( |
648 cert_handle, | 649 cert_handle, |
649 rev_checking_enabled, | 650 rev_checking_enabled, |
650 flags & X509Certificate::VERIFY_CERT_IO_ENABLED, | 651 flags & CertVerifier::VERIFY_CERT_IO_ENABLED, |
651 &ev_policy_oid, | 652 &ev_policy_oid, |
652 1, | 653 1, |
653 cvout); | 654 cvout); |
654 if (status != SECSuccess) | 655 if (status != SECSuccess) |
655 return false; | 656 return false; |
656 | 657 |
657 CERTCertificate* root_ca = | 658 CERTCertificate* root_ca = |
658 cvout[cvout_trust_anchor_index].value.pointer.cert; | 659 cvout[cvout_trust_anchor_index].value.pointer.cert; |
659 if (root_ca == NULL) | 660 if (root_ca == NULL) |
660 return false; | 661 return false; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 cvout[cvout_index].type = cert_po_trustAnchor; | 709 cvout[cvout_index].type = cert_po_trustAnchor; |
709 cvout[cvout_index].value.pointer.cert = NULL; | 710 cvout[cvout_index].value.pointer.cert = NULL; |
710 int cvout_trust_anchor_index = cvout_index; | 711 int cvout_trust_anchor_index = cvout_index; |
711 cvout_index++; | 712 cvout_index++; |
712 cvout[cvout_index].type = cert_po_end; | 713 cvout[cvout_index].type = cert_po_end; |
713 ScopedCERTValOutParam scoped_cvout(cvout); | 714 ScopedCERTValOutParam scoped_cvout(cvout); |
714 | 715 |
715 EVRootCAMetadata* metadata = EVRootCAMetadata::GetInstance(); | 716 EVRootCAMetadata* metadata = EVRootCAMetadata::GetInstance(); |
716 SECOidTag ev_policy_oid = SEC_OID_UNKNOWN; | 717 SECOidTag ev_policy_oid = SEC_OID_UNKNOWN; |
717 bool is_ev_candidate = | 718 bool is_ev_candidate = |
718 (flags & X509Certificate::VERIFY_EV_CERT) && | 719 (flags & CertVerifier::VERIFY_EV_CERT) && |
719 IsEVCandidate(metadata, cert_handle, &ev_policy_oid); | 720 IsEVCandidate(metadata, cert_handle, &ev_policy_oid); |
720 bool cert_io_enabled = flags & X509Certificate::VERIFY_CERT_IO_ENABLED; | 721 bool cert_io_enabled = flags & CertVerifier::VERIFY_CERT_IO_ENABLED; |
721 bool check_revocation = | 722 bool check_revocation = |
722 cert_io_enabled && | 723 cert_io_enabled && |
723 ((flags & X509Certificate::VERIFY_REV_CHECKING_ENABLED) || | 724 ((flags & CertVerifier::VERIFY_REV_CHECKING_ENABLED) || |
724 ((flags & X509Certificate::VERIFY_REV_CHECKING_ENABLED_EV_ONLY) && | 725 ((flags & CertVerifier::VERIFY_REV_CHECKING_ENABLED_EV_ONLY) && |
725 is_ev_candidate)); | 726 is_ev_candidate)); |
726 if (check_revocation) | 727 if (check_revocation) |
727 verify_result->cert_status |= CERT_STATUS_REV_CHECKING_ENABLED; | 728 verify_result->cert_status |= CERT_STATUS_REV_CHECKING_ENABLED; |
728 | 729 |
729 status = PKIXVerifyCert(cert_handle, check_revocation, cert_io_enabled, | 730 status = PKIXVerifyCert(cert_handle, check_revocation, cert_io_enabled, |
730 NULL, 0, cvout); | 731 NULL, 0, cvout); |
731 | 732 |
732 if (crl_set) { | 733 if (crl_set) { |
733 CRLSetResult crl_set_result = CheckRevocationWithCRLSet( | 734 CRLSetResult crl_set_result = CheckRevocationWithCRLSet( |
734 cvout[cvout_cert_list_index].value.pointer.chain, | 735 cvout[cvout_cert_list_index].value.pointer.chain, |
(...skipping 29 matching lines...) Expand all Loading... |
764 if (IsCertStatusError(verify_result->cert_status)) | 765 if (IsCertStatusError(verify_result->cert_status)) |
765 return MapCertStatusToNetError(verify_result->cert_status); | 766 return MapCertStatusToNetError(verify_result->cert_status); |
766 | 767 |
767 AppendPublicKeyHashes(cvout[cvout_cert_list_index].value.pointer.chain, | 768 AppendPublicKeyHashes(cvout[cvout_cert_list_index].value.pointer.chain, |
768 cvout[cvout_trust_anchor_index].value.pointer.cert, | 769 cvout[cvout_trust_anchor_index].value.pointer.cert, |
769 &verify_result->public_key_hashes); | 770 &verify_result->public_key_hashes); |
770 | 771 |
771 verify_result->is_issued_by_known_root = | 772 verify_result->is_issued_by_known_root = |
772 IsKnownRoot(cvout[cvout_trust_anchor_index].value.pointer.cert); | 773 IsKnownRoot(cvout[cvout_trust_anchor_index].value.pointer.cert); |
773 | 774 |
774 if ((flags & X509Certificate::VERIFY_EV_CERT) && is_ev_candidate && | 775 if ((flags & CertVerifier::VERIFY_EV_CERT) && is_ev_candidate && |
775 VerifyEV(cert_handle, flags, crl_set, metadata, ev_policy_oid)) { | 776 VerifyEV(cert_handle, flags, crl_set, metadata, ev_policy_oid)) { |
776 verify_result->cert_status |= CERT_STATUS_IS_EV; | 777 verify_result->cert_status |= CERT_STATUS_IS_EV; |
777 } | 778 } |
778 | 779 |
779 return OK; | 780 return OK; |
780 } | 781 } |
781 | 782 |
782 } // namespace net | 783 } // namespace net |
OLD | NEW |