Index: net/cert/do_nothing_ct_verifier.h |
diff --git a/net/cert/do_nothing_ct_verifier.h b/net/cert/do_nothing_ct_verifier.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c1220e294c7b41c4a34cf188b8dd13f490d40316 |
--- /dev/null |
+++ b/net/cert/do_nothing_ct_verifier.h |
@@ -0,0 +1,65 @@ |
+// Copyright 2016 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_DO_NOTHING_CT_VERIFIER_H_ |
+#define NET_CERT_DO_NOTHING_CT_VERIFIER_H_ |
+ |
+#include "base/macros.h" |
+#include "net/base/net_export.h" |
+#include "net/cert/ct_verifier.h" |
+ |
+namespace net { |
+ |
+// An implementation of CTVerifier that does not validate SCTs. |
+// |
+// SECURITY NOTE: |
+// As Certificate Transparency is an essential part in safeguarding TLS |
+// connections, disabling Certificate Transparency enforcement is a decision |
+// that should not be taken lightly, and it should be made an explicit |
+// decision rather than a potentially accidental decision (such as allowing |
+// for a nullptr instance). By checking Certificate Transparency information, |
+// typically via a net::MultiLogCTVerifier, and enforcing policies related |
+// to Certificate Transparency provided by a net::CTPolicyEnforcer, developers |
+// can help protect their users by ensuring that misissued TLS certificates |
+// are detected. |
+// |
+// However, not every consumer of TLS certificates is using the Web PKI. For |
+// example, they may be using connections authenticated out of band, or may |
+// be using private or local PKIs for which Certificate Transparency is not |
+// relevant. Alternatively, much like how a robust and secure TLS client |
+// requires a regularly updated root certificate store, a robust and secure |
+// Certificate Transparency client requires regular updates. However, since |
+// some clients may not support regular updates, it may be intentional to |
+// disable Certificate Transparency and choose a less-secure default |
+// behavior. |
+// |
+// Consumers of this class should generally try to get a security or design |
+// to discuss the type of net::X509Certificates they will be validating, |
+// and determine whether or not Certificate Transparency is right for the |
+// particular use case. |
+// |
+// Because of the complex nuances related to security tradeoffs, it is |
+// expected that classes which expect a CTVerifier will require one to be |
+// supplied, forcing the caller to make an intentional and explicit decision |
+// about the appropriate security policy, rather than leaving it ambiguous, |
+// such as via a nullptr. This class is intended to indicate an intentional |
+// consideration of CT, and a decision to not support it. |
+class NET_EXPORT DoNothingCTVerifier : public CTVerifier { |
+ public: |
+ DoNothingCTVerifier(); |
+ ~DoNothingCTVerifier() override; |
+ |
+ int Verify(X509Certificate* cert, |
+ const std::string& stapled_ocsp_response, |
+ const std::string& sct_list_from_tls_extension, |
+ SignedCertificateTimestampAndStatusList* output_scts, |
+ const NetLogWithSource& net_log) override; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(DoNothingCTVerifier); |
+}; |
+ |
+} // namespace net |
+ |
+#endif // NET_CERT_DO_NOTHING_CT_VERIFIER_H_ |