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

Unified Diff: content/child/web_url_loader_impl.cc

Issue 1589703002: Surface SCT (Signed Certificate Timestamp) counts in the Security panel. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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: content/child/web_url_loader_impl.cc
diff --git a/content/child/web_url_loader_impl.cc b/content/child/web_url_loader_impl.cc
index b6fdd6a93933e8ade0d76da4214984cdcc41b9d0..185886fc9eb39443fa4f8f0f4af37c6fa59b1565 100644
--- a/content/child/web_url_loader_impl.cc
+++ b/content/child/web_url_loader_impl.cc
@@ -8,6 +8,7 @@
#include <algorithm>
#include <string>
#include <utility>
+#include <vector>
#include "base/bind.h"
#include "base/files/file_path.h"
@@ -36,9 +37,13 @@
#include "content/public/child/fixed_received_data.h"
#include "content/public/child/request_peer.h"
#include "content/public/common/browser_side_navigation_policy.h"
+#include "content/public/common/signed_certificate_timestamp_id_and_status.h"
+#include "content/public/common/ssl_status.h"
#include "net/base/data_url.h"
#include "net/base/filename_util.h"
#include "net/base/net_errors.h"
+#include "net/cert/cert_status_flags.h"
+#include "net/cert/sct_status_flags.h"
#include "net/http/http_response_headers.h"
#include "net/http/http_util.h"
#include "net/ssl/ssl_cipher_suite_names.h"
@@ -237,14 +242,51 @@ void SetSecurityStyleAndDetails(const GURL& url,
response->setSecurityStyle(securityStyle);
+ bool is_valid_ev = ssl_status.cert_status & net::CERT_STATUS_IS_EV;
+
+ SignedCertificateTimestampIDStatusList sct_list =
+ ssl_status.signed_certificate_timestamp_ids;
+
+ // Although the number of SCTs is small (usually <= 5), there is no technical
+ // constraint on the number of deserialized SCTs (apart from RAM size), so we
+ // sanity check that the total count fits into an int before counting the
+ // types of SCTs.
+ DCHECK_LT(sct_list.size(),
+ static_cast<size_t>(std::numeric_limits<int>::max()));
Ryan Sleevi 2016/01/19 19:39:00 SECURITY BUG: This is a security check hidden in a
lgarron 2016/01/22 22:51:27 I've opted to what you recommend below and use siz
+
+ int num_unknown_scts = 0;
+ int num_invalid_scts = 0;
+ int num_valid_scts = 0;
+
+ SignedCertificateTimestampIDStatusList::iterator iter;
+ for (iter = sct_list.begin(); iter < sct_list.end(); ++iter) {
+ switch (iter->status) {
+ case net::ct::SCT_STATUS_LOG_UNKNOWN:
+ num_unknown_scts++;
+ break;
+ case net::ct::SCT_STATUS_INVALID:
+ num_invalid_scts++;
+ break;
+ case net::ct::SCT_STATUS_OK:
+ num_valid_scts++;
+ break;
+ case net::ct::SCT_STATUS_NONE:
+ case net::ct::SCT_STATUS_MAX:
+ // These enum values do not represent SCTs that are taken into account
+ // for CT compliance calculations, so we ignore them.
+ break;
+ }
+ }
+
blink::WebString protocol_string = blink::WebString::fromUTF8(protocol);
blink::WebString cipher_string = blink::WebString::fromUTF8(cipher);
blink::WebString key_exchange_string =
blink::WebString::fromUTF8(key_exchange);
blink::WebString mac_string = blink::WebString::fromUTF8(mac);
response->setSecurityDetails(protocol_string, key_exchange_string,
- cipher_string, mac_string,
- ssl_status.cert_id);
+ cipher_string, mac_string, ssl_status.cert_id,
+ is_valid_ev, num_unknown_scts, num_invalid_scts,
+ num_valid_scts);
}
} // namespace

Powered by Google App Engine
This is Rietveld 408576698