// 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_