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

Side by Side Diff: net/cert/internal/path_builder.cc

Issue 2832703002: Allow the TrustStore interface to return matching intermediates, and identify distrusted certs. (Closed)
Patch Set: mac fix 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/cert/internal/path_builder.h" 5 #include "net/cert/internal/path_builder.h"
6 6
7 #include <set> 7 #include <set>
8 #include <unordered_set> 8 #include <unordered_set>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 const TrustStore* trust_store) 129 const TrustStore* trust_store)
130 : cert_(in_cert), 130 : cert_(in_cert),
131 cert_issuer_sources_(cert_issuer_sources), 131 cert_issuer_sources_(cert_issuer_sources),
132 trust_store_(trust_store) { 132 trust_store_(trust_store) {
133 DVLOG(1) << "CertIssuersIter(" << CertDebugString(cert()) << ") created"; 133 DVLOG(1) << "CertIssuersIter(" << CertDebugString(cert()) << ") created";
134 } 134 }
135 135
136 void CertIssuersIter::GetNextIssuer(CertificateOrTrustAnchor* out) { 136 void CertIssuersIter::GetNextIssuer(CertificateOrTrustAnchor* out) {
137 if (!did_initial_query_) { 137 if (!did_initial_query_) {
138 did_initial_query_ = true; 138 did_initial_query_ = true;
139 trust_store_->FindTrustAnchorsForCert(cert_, &anchors_); 139 ParsedCertificateList issuers_from_trust_store;
140 trust_store_->FindIssuers(cert_, &anchors_, &issuers_from_trust_store);
141 AddIssuers(std::move(issuers_from_trust_store));
140 142
141 for (auto* cert_issuer_source : *cert_issuer_sources_) { 143 for (auto* cert_issuer_source : *cert_issuer_sources_) {
142 ParsedCertificateList new_issuers; 144 ParsedCertificateList new_issuers;
143 cert_issuer_source->SyncGetIssuersOf(cert(), &new_issuers); 145 cert_issuer_source->SyncGetIssuersOf(cert(), &new_issuers);
144 AddIssuers(std::move(new_issuers)); 146 AddIssuers(std::move(new_issuers));
145 } 147 }
146 DVLOG(1) << anchors_.size() << " sync anchors, " << issuers_.size() 148 DVLOG(1) << anchors_.size() << " sync anchors, " << issuers_.size()
147 << " sync issuers"; 149 << " sync issuers";
148 // TODO(mattm): sort by notbefore, etc (eg if cert issuer matches a trust 150 // TODO(mattm): sort by notbefore, etc (eg if cert issuer matches a trust
149 // anchor subject (or is a trust anchor), that should be sorted higher too. 151 // anchor subject (or is a trust anchor), that should be sorted higher too.
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 545
544 // Verify the entire certificate chain. 546 // Verify the entire certificate chain.
545 auto result_path = base::MakeUnique<ResultPath>(); 547 auto result_path = base::MakeUnique<ResultPath>();
546 bool verify_result = VerifyCertificateChain( 548 bool verify_result = VerifyCertificateChain(
547 next_path_.certs, next_path_.trust_anchor.get(), signature_policy_, time_, 549 next_path_.certs, next_path_.trust_anchor.get(), signature_policy_, time_,
548 key_purpose_, &result_path->errors); 550 key_purpose_, &result_path->errors);
549 DVLOG(1) << "CertPathBuilder VerifyCertificateChain result = " 551 DVLOG(1) << "CertPathBuilder VerifyCertificateChain result = "
550 << verify_result; 552 << verify_result;
551 result_path->path = next_path_; 553 result_path->path = next_path_;
552 DCHECK_EQ(verify_result, !result_path->errors.ContainsHighSeverityErrors()); 554 DCHECK_EQ(verify_result, !result_path->errors.ContainsHighSeverityErrors());
555
556 // TODO(eroman): Check that none of the certificates are blacklisted.
557
553 AddResultPath(std::move(result_path)); 558 AddResultPath(std::move(result_path));
554 559
555 if (verify_result) { 560 if (verify_result) {
556 // Found a valid path, return immediately. 561 // Found a valid path, return immediately.
557 // TODO(mattm): add debug/test mode that tries all possible paths. 562 // TODO(mattm): add debug/test mode that tries all possible paths.
558 next_state_ = STATE_NONE; 563 next_state_ = STATE_NONE;
559 return; 564 return;
560 } 565 }
561 566
562 // Path did not verify. Try more paths. If there are no more paths, the result 567 // Path did not verify. Try more paths. If there are no more paths, the result
563 // will be returned next time DoGetNextPathComplete is called with next_path_ 568 // will be returned next time DoGetNextPathComplete is called with next_path_
564 // empty. 569 // empty.
565 next_state_ = STATE_GET_NEXT_PATH; 570 next_state_ = STATE_GET_NEXT_PATH;
566 } 571 }
567 572
568 void CertPathBuilder::AddResultPath(std::unique_ptr<ResultPath> result_path) { 573 void CertPathBuilder::AddResultPath(std::unique_ptr<ResultPath> result_path) {
569 // TODO(mattm): set best_result_index based on number or severity of errors. 574 // TODO(mattm): set best_result_index based on number or severity of errors.
570 if (result_path->IsValid()) 575 if (result_path->IsValid())
571 out_result_->best_result_index = out_result_->paths.size(); 576 out_result_->best_result_index = out_result_->paths.size();
572 // TODO(mattm): add flag to only return a single path or all attempted paths? 577 // TODO(mattm): add flag to only return a single path or all attempted paths?
573 out_result_->paths.push_back(std::move(result_path)); 578 out_result_->paths.push_back(std::move(result_path));
574 } 579 }
575 580
576 } // namespace net 581 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698