| // Copyright 2017 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef NET_CERT_INTERNAL_REVOCATION_CHECKER_H_ | |
| #define NET_CERT_INTERNAL_REVOCATION_CHECKER_H_ | |
| #include "base/strings/string_piece_forward.h" | |
| #include "net/base/net_export.h" | |
| #include "net/cert/crl_set.h" | |
| #include "net/cert/internal/parsed_certificate.h" | |
| namespace net { | |
| class CertPathErrors; | |
| class CertNetFetcher; | |
| struct CertificateTrust; | |
| // RevocationPolicy describes how revocation should be carried out for a | |
| // particular chain. | |
| struct NET_EXPORT_PRIVATE RevocationPolicy { | |
| // Callers should not rely on the default-initialized value, but should fully | |
| // specify all the parameters. | |
| RevocationPolicy(); | |
| // If |check_revocation| is true, then revocation checking is mandatory. This | |
| // means that every certificate in the chain (excluding trust anchors) must | |
| // have valid (unexpired) revocation information proving it to be unrevoked. | |
| // | |
| // The mechanisms used for checking revocation may include stapled OCSP, | |
| // cached OCSP, online OCSP, cached CRL, online CRL. | |
| // | |
| // The other properties of RevocationPolicy place further constraints on how | |
| // revocation checking may proceed. | |
| bool check_revocation : 1; | |
| // If |networking_allowed| is true then revocation checking is allowed to | |
| // issue network requests in order to fetch fresh OCSP/CRL. Otherwise | |
| // networking is not permitted in the course of revocation checking. | |
| bool networking_allowed : 1; | |
| // If set to true, considers certificates lacking URLs for OCSP/CRL to be | |
| // unrevoked. Otherwise will fail for certificates lacking revocation | |
| // mechanisms. | |
| bool allow_missing_info : 1; | |
| // If set to true, failure to perform online revocation checks (due to a | |
| // network level failure) is considered equivalent to a successful revocation | |
| // check. | |
| // | |
| // TODO(649017): The "soft fail" expectations of consumers are more broad than | |
| // this, and may also entail parsing failures and parsed non-success OCSP | |
| // responses. | |
| bool allow_network_failure : 1; | |
| }; | |
| // Checks the revocation status of |certs| according to |policy|, and adds | |
| // any failures to |errors|. On failure errors are added to |errors|. On success | |
| // no errors are added. | |
| // | |
| // |net_fetcher| may be null, however this may lead to failed revocation checks | |
| // depending on |policy|. | |
| NET_EXPORT_PRIVATE void CheckCertChainRevocation( | |
| const ParsedCertificateList& certs, | |
| const CertificateTrust& last_cert_trust, | |
| const RevocationPolicy& policy, | |
| base::StringPiece stapled_leaf_ocsp_response, | |
| CertNetFetcher* net_fetcher, | |
| CertPathErrors* errors); | |
| // Checks the revocation status of a certificate chain using the CRLSet and adds | |
| // revocation errors to |errors|. | |
| // | |
| // Returns the revocation status of the leaf certificate: | |
| // | |
| // * CRLSet::REVOKED if any certificate in the chain is revoked. Also adds a | |
| // corresponding error for the certificate in |errors|. | |
| // | |
| // * CRLSet::GOOD if the leaf certificate is covered as GOOD by the CRLSet, and | |
| // none of the intermediates were revoked according to the CRLSet. | |
| // | |
| // * CRLSet::UNKNOWN if none of the certificates are known to be revoked, and | |
| // the revocation status of leaf certificate was UNKNOWN by the CRLSet. | |
| NET_EXPORT_PRIVATE CRLSet::Result CheckChainRevocationUsingCRLSet( | |
| const CRLSet* crl_set, | |
| const ParsedCertificateList& certs, | |
| CertPathErrors* errors); | |
| } // namespace net | |
| #endif // NET_CERT_INTERNAL_REVOCATION_CHECKER_H_ |