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

Unified Diff: net/http/transport_security_state.h

Issue 2040513003: Implement Expect-Staple (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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/http/transport_security_state.h
diff --git a/net/http/transport_security_state.h b/net/http/transport_security_state.h
index 14c080a4b65ae6e72f4a37f965dfa8974fc89dd1..11bbe8193b012e0ca50774cd3fc97d8235063651 100644
--- a/net/http/transport_security_state.h
+++ b/net/http/transport_security_state.h
@@ -198,6 +198,23 @@ class NET_EXPORT TransportSecurityState
GURL report_uri;
};
+ // An ExpectStapleState describes a site that expects valid OCSP information
+ // to be stapled to its certificate on every connection.
+ class NET_EXPORT ExpectStapleState {
+ public:
+ ExpectStapleState();
+ ~ExpectStapleState();
+
+ // The domain which matched during a search for this Expect-Staple entry
+ std::string domain;
+
+ // The URI reports are sent to if a valid OCSP response is not stapled
+ GURL report_uri;
+
+ // True if subdomains are subject to this policy
+ bool include_subdomains;
+ };
+
// An interface for asynchronously sending HPKP violation reports.
class NET_EXPORT ReportSender {
public:
@@ -228,6 +245,19 @@ class NET_EXPORT TransportSecurityState
virtual ~ExpectCTReporter() {}
};
+ // An interface for building and asynchronously sending reports when a site
+ // expects to have sent a valid OCSP staple during a TLS handshake, but it
+ // wasn't supplied.
+ class NET_EXPORT ExpectStapleReporter {
+ public:
+ virtual void OnExpectStapleFailed(const net::HostPortPair& host_port_pair,
+ const GURL& report_uri,
+ const net::SSLInfo& ssl_info) = 0;
+
+ protected:
+ virtual ~ExpectStapleReporter() {}
+ };
+
// Indicates whether or not a public key pin check should send a
// report if a violation is detected.
enum PublicKeyPinReportStatus { ENABLE_PIN_REPORTS, DISABLE_PIN_REPORTS };
@@ -261,6 +291,8 @@ class NET_EXPORT TransportSecurityState
void SetExpectCTReporter(ExpectCTReporter* expect_ct_reporter);
+ void SetExpectStapleReporter(ExpectStapleReporter* expect_staple_reporter);
+
// Clears all dynamic data (e.g. HSTS and HPKP data).
//
// Does NOT persist changes using the Delegate, as this function is only
@@ -367,6 +399,10 @@ class NET_EXPORT TransportSecurityState
const HostPortPair& host_port_pair,
const SSLInfo& ssl_info);
+ // TODO
+ void CheckExpectStaple(const HostPortPair& host_port_pair,
+ const SSLInfo& ssl_info);
+
private:
friend class TransportSecurityStateTest;
FRIEND_TEST_ALL_PREFIXES(HttpSecurityHeadersTest, UpdateDynamicPKPOnly);
@@ -447,6 +483,14 @@ class NET_EXPORT TransportSecurityState
bool GetStaticExpectCTState(const std::string& host,
ExpectCTState* expect_ct_result) const;
+ // Returns true and updates |*expect_staple_result| iff there is a static
+ // (built-in) state for |host| with expect_staple=true, or if |host| is a
+ // subdomain of another domain with expect_staple=true and
+ // include_subdomains_for_expect_staple=true.
+ bool GetStaticExpectStapleState(
+ const std::string& host,
+ ExpectStapleState* expect_staple_result) const;
+
// The sets of hosts that have enabled TransportSecurity. |domain| will always
// be empty for a STSState or PKPState in these maps; the domain
// comes from the map keys instead. In addition, |upgrade_mode| in the
@@ -467,6 +511,11 @@ class NET_EXPORT TransportSecurityState
ExpectCTReporter* expect_ct_reporter_;
+ // True if static expect-staple state should be used.
+ bool enable_static_expect_staple_;
+
+ ExpectStapleReporter* expect_staple_reporter_;
+
// Keeps track of reports that have been sent recently for
// rate-limiting.
ExpiringCache<std::string, bool, base::TimeTicks, std::less<base::TimeTicks>>

Powered by Google App Engine
This is Rietveld 408576698