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

Unified Diff: net/tools/cert_verify_tool/verify_using_path_builder.cc

Issue 2292333002: Add errors per ResultPath for CertPathBuilder. (Closed)
Patch Set: Created 4 years, 4 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/tools/cert_verify_tool/verify_using_path_builder.cc
diff --git a/net/tools/cert_verify_tool/verify_using_path_builder.cc b/net/tools/cert_verify_tool/verify_using_path_builder.cc
index 2e130f6ec86cdb9c1ba0f4d7d774d82f9b824cea..94405432760428839852dc9eeed8b15926d28b08 100644
--- a/net/tools/cert_verify_tool/verify_using_path_builder.cc
+++ b/net/tools/cert_verify_tool/verify_using_path_builder.cc
@@ -10,7 +10,6 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "crypto/sha2.h"
-#include "net/base/net_errors.h"
#include "net/base/test_completion_callback.h"
#include "net/cert/internal/cert_issuer_source_aia.h"
#include "net/cert/internal/cert_issuer_source_static.h"
@@ -114,6 +113,48 @@ std::string SubjectFromTrustAnchor(const net::TrustAnchor* trust_anchor) {
return SubjectToString(parsed_subject);
}
+void PrintCertErrors(const net::CertErrors& errors) {
+ // TODO(crbug.com/634443): Include more detailed error information. Also this
+ // should likely be extracted to a common location and used by unit-tests and
+ // other debugging needs.
+ for (const auto& error : errors.errors()) {
+ std::cout << " " << error.type;
+ }
+}
+
+// Dumps a ResultPath to std::cout.
+void PrintResultPath(const net::CertPathBuilder::ResultPath* result_path,
+ size_t index,
+ bool is_best) {
+ std::cout << "path " << index << " "
+ << (result_path->valid ? "valid" : "invalid")
+ << (is_best ? " (best)" : "") << "\n";
+
+ // Print the certificate chain.
+ for (const auto& cert : result_path->path.certs) {
+ std::cout << " " << FingerPrintParsedCertificate(cert.get()) << " "
+ << SubjectFromParsedCertificate(cert.get()) << "\n";
+ }
+
+ // Print the trust anchor (if there was one).
+ const auto& trust_anchor = result_path->path.trust_anchor;
+ if (trust_anchor) {
+ std::string trust_anchor_cert_fingerprint = "<no cert>";
+ if (trust_anchor->cert()) {
+ trust_anchor_cert_fingerprint =
+ FingerPrintParsedCertificate(trust_anchor->cert().get());
+ }
+ std::cout << " " << trust_anchor_cert_fingerprint << " "
+ << SubjectFromTrustAnchor(trust_anchor.get()) << "\n";
+ }
+
+ // Print the errors.
+ if (result_path->errors.errors().empty()) {
+ std::cout << "Errors:\n";
+ PrintCertErrors(result_path->errors);
+ }
+}
+
} // namespace
// Verifies |target_der_cert| using CertPathBuilder.
@@ -197,29 +238,14 @@ bool VerifyUsingPathBuilder(
DVLOG(1) << "async completed.";
}
- // TODO(crbug.com/634443): Display the full error information.
- std::cout << "CertPathBuilder best result: "
- << net::ErrorToShortString(result.error()) << "\n";
+ // TODO(crbug.com/634443): Display any errors/warnings associated with path
+ // building that were not part of a particular
+ // PathResult.
+ std::cout << "CertPathBuilder result: "
+ << (result.HasValidPath() ? "SUCCESS" : "FAILURE") << "\n";
for (size_t i = 0; i < result.paths.size(); ++i) {
- std::cout << "path " << i << " "
- << net::ErrorToShortString(result.paths[i]->error)
- << ((result.best_result_index == i) ? " (best)" : "") << "\n";
- for (const auto& cert : result.paths[i]->path.certs) {
- std::cout << " " << FingerPrintParsedCertificate(cert.get()) << " "
- << SubjectFromParsedCertificate(cert.get()) << "\n";
- }
-
- const auto& trust_anchor = result.paths[i]->path.trust_anchor;
- if (trust_anchor) {
- std::string trust_anchor_cert_fingerprint = "<no cert>";
- if (trust_anchor->cert()) {
- trust_anchor_cert_fingerprint =
- FingerPrintParsedCertificate(trust_anchor->cert().get());
- }
- std::cout << " " << trust_anchor_cert_fingerprint << " "
- << SubjectFromTrustAnchor(trust_anchor.get()) << "\n";
- }
+ PrintResultPath(result.paths[i].get(), i, i == result.best_result_index);
}
// TODO(mattm): add flag to dump all paths, not just the final one?
@@ -232,5 +258,5 @@ bool VerifyUsingPathBuilder(
}
}
- return result.error() == net::OK;
+ return result.HasValidPath();
}

Powered by Google App Engine
This is Rietveld 408576698