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

Unified Diff: net/http/transport_security_state.h

Issue 1211933005: Initial (partial) implementation of HPKP violation reporting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: style fixes, comments Created 5 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
« no previous file with comments | « net/http/transport_security_reporter.cc ('k') | net/http/transport_security_state.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/transport_security_state.h
diff --git a/net/http/transport_security_state.h b/net/http/transport_security_state.h
index 2cbd5ef52ba7a34e6af43d880d323f6973cab36e..cc12d8e1fc80dc554645036bd71261a52c3ef98f 100644
--- a/net/http/transport_security_state.h
+++ b/net/http/transport_security_state.h
@@ -18,6 +18,8 @@
#include "net/cert/x509_cert_types.h"
#include "net/cert/x509_certificate.h"
+class GURL;
+
namespace net {
class SSLInfo;
@@ -45,9 +47,6 @@ class NET_EXPORT TransportSecurityState
virtual ~Delegate() {}
};
- TransportSecurityState();
- ~TransportSecurityState();
-
// A DomainState describes the transport security state (required upgrade
// to HTTPS, and/or any public key pins).
//
@@ -113,6 +112,10 @@ class NET_EXPORT TransportSecurityState
// The domain which matched during a search for this DomainState entry.
// Updated by |GetDynamicDomainState| and |GetStaticDomainState|.
std::string domain;
+
+ // Optional; a uri-reference indicating where reports should be
+ // sent when this pin is violated.
+ std::string report_uri;
};
// Takes a set of SubjectPublicKeyInfo |hashes| and returns true if:
@@ -166,15 +169,59 @@ class NET_EXPORT TransportSecurityState
std::map<std::string, DomainState>::const_iterator end_;
};
+ class NET_EXPORT Reporter {
+ public:
+ virtual ~Reporter() {}
+
+ // Returns true if a violation report should be sent for the host in
+ // the given |pkp_state|, and returns the report destination URI in
+ // |report_uri|. Returns false if a report should not be sent.
+ virtual bool GetHPKPReportUri(const DomainState::PKPState& pkp_state,
+ GURL* report_uri) = 0;
+
+ // Builds a serialized HPKP violation report in
+ // |serialized_report|. Returns true on success and false on
+ // failure.
+ virtual bool BuildHPKPReport(
+ const std::string& hostname,
+ uint16_t port,
+ const base::Time& expiry,
+ bool include_subdomains,
+ const std::string& effective_hostname,
+ const scoped_refptr<X509Certificate>& served_certificate_chain,
+ const scoped_refptr<X509Certificate>& validated_certificate_chain,
+ const HashValueVector& spki_hashes,
+ std::string* serialized_report) = 0;
+
+ // Sends the given serialized |report| to |report_uri|.
+ virtual void SendHPKPReport(const GURL& report_uri,
+ const std::string& report) = 0;
+ };
+
+ // Indicates whether or not a public key pin check should send a
+ // report if a violation is detected.
+ enum PublicKeyPinReportStatus {
+ DO_NOT_SEND_PUBLIC_KEY_PIN_REPORT,
+ SEND_PUBLIC_KEY_PIN_REPORT
+ };
+
+ TransportSecurityState();
+ ~TransportSecurityState();
+
// These functions search for static and dynamic DomainStates, and invoke the
// functions of the same name on them. These functions are the primary public
// interface; direct access to DomainStates is best left to tests.
bool ShouldSSLErrorsBeFatal(const std::string& host);
bool ShouldUpgradeToSSL(const std::string& host);
- bool CheckPublicKeyPins(const std::string& host,
- bool is_issued_by_known_root,
- const HashValueVector& hashes,
- std::string* failure_log);
+ bool CheckPublicKeyPins(
+ const std::string& host,
+ bool is_issued_by_known_root,
+ const HashValueVector& hashes,
+ uint16_t port,
+ const scoped_refptr<X509Certificate>& served_certificate_chain,
+ const scoped_refptr<X509Certificate>& validated_certificate_chain,
+ const PublicKeyPinReportStatus report_status,
+ std::string* failure_log);
bool HasPublicKeyPins(const std::string& host);
// Assign a |Delegate| for persisting the transport security state. If
@@ -184,6 +231,8 @@ class NET_EXPORT TransportSecurityState
// TransportSecurityState.
void SetDelegate(Delegate* delegate);
+ void SetReporter(Reporter* reporter);
+
// Clears all dynamic data (e.g. HSTS and HPKP data).
//
// Does NOT persist changes using the Delegate, as this function is only
@@ -254,7 +303,8 @@ class NET_EXPORT TransportSecurityState
void AddHPKP(const std::string& host,
const base::Time& expiry,
bool include_subdomains,
- const HashValueVector& hashes);
+ const HashValueVector& hashes,
+ const std::string& report_uri);
// Returns true iff we have any static public key pins for the |host| and
// iff its set of required pins is the set we expect for Google
@@ -291,9 +341,14 @@ class NET_EXPORT TransportSecurityState
static bool IsBuildTimely();
// Helper method for actually checking pins.
- bool CheckPublicKeyPinsImpl(const std::string& host,
- const HashValueVector& hashes,
- std::string* failure_log);
+ bool CheckPublicKeyPinsImpl(
+ const std::string& host,
+ const HashValueVector& hashes,
+ uint16_t port,
+ const scoped_refptr<X509Certificate>& served_certificate_chain,
+ const scoped_refptr<X509Certificate>& validated_certificate_chain,
+ const PublicKeyPinReportStatus report_status,
+ std::string* failure_log);
// If a Delegate is present, notify it that the internal state has
// changed.
@@ -310,7 +365,8 @@ class NET_EXPORT TransportSecurityState
const base::Time& last_observed,
const base::Time& expiry,
bool include_subdomains,
- const HashValueVector& hashes);
+ const HashValueVector& hashes,
+ const std::string& report_uri);
// Enable TransportSecurity for |host|. |state| supercedes any previous
// state for the |host|, including static entries.
@@ -325,6 +381,8 @@ class NET_EXPORT TransportSecurityState
Delegate* delegate_;
+ Reporter* reporter_;
+
// True if static pins should be used.
bool enable_static_pins_;
« no previous file with comments | « net/http/transport_security_reporter.cc ('k') | net/http/transport_security_state.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698