Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Unified Diff: net/cert/cert_verify_proc_builtin.cc

Issue 2832703002: Allow the TrustStore interface to return matching intermediates, and identify distrusted certs. (Closed)
Patch Set: address comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/cert/cert_verify_proc_builtin.cc
diff --git a/net/cert/cert_verify_proc_builtin.cc b/net/cert/cert_verify_proc_builtin.cc
index ee85d5e0aedc82e63ee423ae6b3a253ee606b28c..efba79bfe5e092ce407d22d1650e6a961040da10 100644
--- a/net/cert/cert_verify_proc_builtin.cc
+++ b/net/cert/cert_verify_proc_builtin.cc
@@ -103,15 +103,12 @@ void AppendPublicKeyHashes(const der::Input& spki_bytes,
hashes->push_back(sha256);
}
-// Appends the SubjectPublicKeyInfo hashes for all certificates (and trust
-// anchor) in |partial_path| to |*hashes|.
+// Appends the SubjectPublicKeyInfo hashes for all certificates in
+// |partial_path| to |*hashes|.
void AppendPublicKeyHashes(const CertPathBuilder::ResultPath& partial_path,
HashValueVector* hashes) {
for (const scoped_refptr<ParsedCertificate>& cert : partial_path.path.certs)
AppendPublicKeyHashes(cert->tbs().spki_tlv, hashes);
-
- if (partial_path.path.trust_anchor)
- AppendPublicKeyHashes(partial_path.path.trust_anchor->spki(), hashes);
}
// Sets the bits on |cert_status| for all the errors present in |errors| (the
@@ -159,12 +156,6 @@ scoped_refptr<X509Certificate> CreateVerifiedCertChain(
for (size_t i = 1; i < path.path.certs.size(); ++i)
intermediates.push_back(CreateOSCertHandle(path.path.certs[i]));
- if (path.path.trust_anchor) {
- // TODO(eroman): This assumes that TrustAnchor::cert() cannot be null,
- // which disagrees with the documentation.
- intermediates.push_back(CreateOSCertHandle(path.path.trust_anchor->cert()));
- }
-
scoped_refptr<X509Certificate> result = X509Certificate::CreateFromHandle(
target_cert->os_cert_handle(), intermediates);
// |target_cert| was already successfully parsed, so this should never fail.
@@ -205,10 +196,8 @@ void DoVerify(X509Certificate* input_cert,
for (const auto& x509_cert : additional_trust_anchors) {
scoped_refptr<ParsedCertificate> cert = ParseCertificateFromOSHandle(
x509_cert->os_cert_handle(), &parsing_errors);
- if (cert) {
- ssl_trust_store->AddTrustAnchor(
- TrustAnchor::CreateFromCertificateNoConstraints(std::move(cert)));
- }
+ if (cert)
+ ssl_trust_store->AddTrustAnchor(cert);
// TODO(eroman): Surface parsing errors of additional trust anchor.
}
@@ -236,10 +225,6 @@ void DoVerify(X509Certificate* input_cert,
&signature_policy, verification_time,
KeyPurpose::SERVER_AUTH, &result);
- // Allow the path builder to discover intermediates from the trust store.
- if (ssl_trust_store->GetCertIssuerSource())
- path_builder.AddCertIssuerSource(ssl_trust_store->GetCertIssuerSource());
-
// Allow the path builder to discover the explicitly provided intermediates in
// |input_cert|.
CertIssuerSourceStatic intermediates;
@@ -264,17 +249,13 @@ void DoVerify(X509Certificate* input_cert,
const CertPathBuilder::ResultPath& partial_path =
*result.paths[result.best_result_index].get();
- if (partial_path.path.trust_anchor) {
+ const ParsedCertificate* trusted_cert = partial_path.path.GetTrustedCert();
+ if (trusted_cert) {
verify_result->is_issued_by_known_root =
- ssl_trust_store->IsKnownRoot(partial_path.path.trust_anchor);
+ ssl_trust_store->IsKnownRoot(trusted_cert);
verify_result->is_issued_by_additional_trust_anchor =
- ssl_trust_store->IsAdditionalTrustAnchor(
- partial_path.path.trust_anchor);
- } else {
- // TODO(eroman): This shouldn't be necessary -- partial_path.errors should
- // contain an error if it didn't chain to trust anchor.
- verify_result->cert_status |= CERT_STATUS_AUTHORITY_INVALID;
+ ssl_trust_store->IsAdditionalTrustAnchor(trusted_cert);
}
verify_result->verified_cert =

Powered by Google App Engine
This is Rietveld 408576698