OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ssl/chrome_security_state_model_client.h" | 5 #include "chrome/browser/ssl/chrome_security_state_model_client.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
151 secure_explanations[0].description); | 151 secure_explanations[0].description); |
152 int cert_id = browser->tab_strip_model() | 152 int cert_id = browser->tab_strip_model() |
153 ->GetActiveWebContents() | 153 ->GetActiveWebContents() |
154 ->GetController() | 154 ->GetController() |
155 .GetActiveEntry() | 155 .GetActiveEntry() |
156 ->GetSSL() | 156 ->GetSSL() |
157 .cert_id; | 157 .cert_id; |
158 EXPECT_EQ(cert_id, secure_explanations[0].cert_id); | 158 EXPECT_EQ(cert_id, secure_explanations[0].cert_id); |
159 } | 159 } |
160 | 160 |
161 EXPECT_EQ(l10n_util::GetStringUTF8(IDS_SECURE_PROTOCOL_AND_CIPHERSUITE), | 161 EXPECT_EQ(l10n_util::GetStringUTF8(IDS_STRONG_SSL_SUMMARY), |
162 secure_explanations.back().summary); | 162 secure_explanations.back().summary); |
163 EXPECT_EQ( | 163 |
164 l10n_util::GetStringUTF8(IDS_SECURE_PROTOCOL_AND_CIPHERSUITE_DESCRIPTION), | 164 content::WebContents* web_contents = |
165 secure_explanations.back().description); | 165 browser->tab_strip_model()->GetActiveWebContents(); |
166 const SecurityStateModel::SecurityInfo& security_info = | |
167 ChromeSecurityStateModelClient::FromWebContents(web_contents) | |
168 ->GetSecurityInfo(); | |
169 | |
170 const char *protocol, *key_exchange, *cipher, *mac; | |
171 int ssl_version = | |
172 net::SSLConnectionStatusToVersion(security_info.connection_status); | |
173 net::SSLVersionToString(&protocol, ssl_version); | |
174 bool is_aead; | |
175 uint16_t cipher_suite = | |
176 net::SSLConnectionStatusToCipherSuite(security_info.connection_status); | |
177 net::SSLCipherSuiteToStrings(&key_exchange, &cipher, &mac, &is_aead, | |
178 cipher_suite); | |
179 EXPECT_EQ(TRUE, is_aead); | |
estark
2016/08/08 18:01:38
nit: EXPECT_TRUE(is_aead)
lgarron
2016/08/08 20:38:26
Done.
| |
180 EXPECT_EQ(NULL, mac); // The default secure cipher does not have a MAC. | |
181 | |
182 std::vector<base::string16> description_replacements; | |
183 description_replacements.push_back(base::ASCIIToUTF16(protocol)); | |
184 description_replacements.push_back(base::ASCIIToUTF16(key_exchange)); | |
185 description_replacements.push_back(base::ASCIIToUTF16(cipher)); | |
186 base::string16 secure_description = l10n_util::GetStringFUTF16( | |
187 IDS_STRONG_SSL_DESCRIPTION, description_replacements, nullptr); | |
188 | |
189 EXPECT_EQ(secure_description, | |
190 base::ASCIIToUTF16(secure_explanations.back().description)); | |
166 } | 191 } |
167 | 192 |
168 void CheckSecurityInfoForSecure( | 193 void CheckSecurityInfoForSecure( |
169 content::WebContents* contents, | 194 content::WebContents* contents, |
170 SecurityStateModel::SecurityLevel expect_security_level, | 195 SecurityStateModel::SecurityLevel expect_security_level, |
171 SecurityStateModel::SHA1DeprecationStatus expect_sha1_status, | 196 SecurityStateModel::SHA1DeprecationStatus expect_sha1_status, |
172 SecurityStateModel::MixedContentStatus expect_mixed_content_status, | 197 SecurityStateModel::MixedContentStatus expect_mixed_content_status, |
173 bool pkp_bypassed, | 198 bool pkp_bypassed, |
174 bool expect_cert_error) { | 199 bool expect_cert_error) { |
175 ASSERT_TRUE(contents); | 200 ASSERT_TRUE(contents); |
(...skipping 801 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
977 EXPECT_TRUE(observer.latest_explanations().scheme_is_cryptographic); | 1002 EXPECT_TRUE(observer.latest_explanations().scheme_is_cryptographic); |
978 EXPECT_FALSE(observer.latest_explanations().pkp_bypassed); | 1003 EXPECT_FALSE(observer.latest_explanations().pkp_bypassed); |
979 EXPECT_TRUE(observer.latest_explanations().info_explanations.empty()); | 1004 EXPECT_TRUE(observer.latest_explanations().info_explanations.empty()); |
980 EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content); | 1005 EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content); |
981 EXPECT_FALSE(observer.latest_explanations().ran_insecure_content); | 1006 EXPECT_FALSE(observer.latest_explanations().ran_insecure_content); |
982 } | 1007 } |
983 | 1008 |
984 // After AddNonsecureUrlHandler() is called, requests to this hostname | 1009 // After AddNonsecureUrlHandler() is called, requests to this hostname |
985 // will use obsolete TLS settings. | 1010 // will use obsolete TLS settings. |
986 const char kMockNonsecureHostname[] = "example-nonsecure.test"; | 1011 const char kMockNonsecureHostname[] = "example-nonsecure.test"; |
1012 const int kObsoleteTLSVersion = net::SSL_CONNECTION_VERSION_TLS1_1; | |
1013 // ECDHE_RSA + AES_128_CBC with HMAC-SHA1 | |
1014 const uint16_t kObsoleteCipherSuite = 0xc013; | |
987 | 1015 |
988 // A URLRequestMockHTTPJob that mocks a TLS connection with an obsolete | 1016 // A URLRequestMockHTTPJob that mocks a TLS connection with the obsolete |
989 // protocol version. | 1017 // TLS settings specified in kObsoleteTLSVersion and |
1018 // kObsoleteCipherSuite. | |
990 class URLRequestObsoleteTLSJob : public net::URLRequestMockHTTPJob { | 1019 class URLRequestObsoleteTLSJob : public net::URLRequestMockHTTPJob { |
991 public: | 1020 public: |
992 URLRequestObsoleteTLSJob(net::URLRequest* request, | 1021 URLRequestObsoleteTLSJob(net::URLRequest* request, |
993 net::NetworkDelegate* network_delegate, | 1022 net::NetworkDelegate* network_delegate, |
994 const base::FilePath& file_path, | 1023 const base::FilePath& file_path, |
995 scoped_refptr<net::X509Certificate> cert, | 1024 scoped_refptr<net::X509Certificate> cert, |
996 scoped_refptr<base::TaskRunner> task_runner) | 1025 scoped_refptr<base::TaskRunner> task_runner) |
997 : net::URLRequestMockHTTPJob(request, | 1026 : net::URLRequestMockHTTPJob(request, |
998 network_delegate, | 1027 network_delegate, |
999 file_path, | 1028 file_path, |
1000 task_runner), | 1029 task_runner), |
1001 cert_(std::move(cert)) {} | 1030 cert_(std::move(cert)) {} |
1002 | 1031 |
1003 void GetResponseInfo(net::HttpResponseInfo* info) override { | 1032 void GetResponseInfo(net::HttpResponseInfo* info) override { |
1004 net::URLRequestMockHTTPJob::GetResponseInfo(info); | 1033 net::URLRequestMockHTTPJob::GetResponseInfo(info); |
1005 net::SSLConnectionStatusSetVersion(net::SSL_CONNECTION_VERSION_TLS1_1, | 1034 net::SSLConnectionStatusSetVersion(kObsoleteTLSVersion, |
1006 &info->ssl_info.connection_status); | 1035 &info->ssl_info.connection_status); |
1007 const uint16_t kTlsEcdheRsaWithAes128CbcSha = 0xc013; | 1036 net::SSLConnectionStatusSetCipherSuite(kObsoleteCipherSuite, |
1008 net::SSLConnectionStatusSetCipherSuite(kTlsEcdheRsaWithAes128CbcSha, | |
1009 &info->ssl_info.connection_status); | 1037 &info->ssl_info.connection_status); |
1010 info->ssl_info.cert = cert_; | 1038 info->ssl_info.cert = cert_; |
1011 } | 1039 } |
1012 | 1040 |
1013 protected: | 1041 protected: |
1014 ~URLRequestObsoleteTLSJob() override {} | 1042 ~URLRequestObsoleteTLSJob() override {} |
1015 | 1043 |
1016 private: | 1044 private: |
1017 const scoped_refptr<net::X509Certificate> cert_; | 1045 const scoped_refptr<net::X509Certificate> cert_; |
1018 | 1046 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1106 // The security style of the page doesn't get downgraded for obsolete | 1134 // The security style of the page doesn't get downgraded for obsolete |
1107 // TLS settings, so it should remain at SECURITY_STYLE_AUTHENTICATED. | 1135 // TLS settings, so it should remain at SECURITY_STYLE_AUTHENTICATED. |
1108 EXPECT_EQ(content::SECURITY_STYLE_AUTHENTICATED, | 1136 EXPECT_EQ(content::SECURITY_STYLE_AUTHENTICATED, |
1109 observer.latest_security_style()); | 1137 observer.latest_security_style()); |
1110 | 1138 |
1111 // The messages explaining the security style do, however, get | 1139 // The messages explaining the security style do, however, get |
1112 // downgraded: SECURE_PROTOCOL_AND_CIPHERSUITE should not show up when | 1140 // downgraded: SECURE_PROTOCOL_AND_CIPHERSUITE should not show up when |
1113 // the TLS settings are obsolete. | 1141 // the TLS settings are obsolete. |
1114 for (const auto& explanation : | 1142 for (const auto& explanation : |
1115 observer.latest_explanations().secure_explanations) { | 1143 observer.latest_explanations().secure_explanations) { |
1116 EXPECT_NE(l10n_util::GetStringUTF8(IDS_SECURE_PROTOCOL_AND_CIPHERSUITE), | 1144 EXPECT_NE(l10n_util::GetStringUTF8(IDS_STRONG_SSL_SUMMARY), |
1117 explanation.summary); | 1145 explanation.summary); |
1118 } | 1146 } |
1147 | |
1148 // Populate description string replacement with values corresponding | |
1149 // to test constants. | |
1150 std::vector<base::string16> description_replacements; | |
1151 description_replacements.push_back( | |
1152 l10n_util::GetStringUTF16(IDS_SSL_AN_OBSOLETE_PROTOCOL)); | |
1153 description_replacements.push_back(base::ASCIIToUTF16("TLS 1.1")); | |
1154 description_replacements.push_back( | |
1155 l10n_util::GetStringUTF16(IDS_SSL_A_STRONG_KEY_EXCHANGE)); | |
1156 description_replacements.push_back(base::ASCIIToUTF16("ECDHE_RSA")); | |
1157 description_replacements.push_back( | |
1158 l10n_util::GetStringUTF16(IDS_SSL_AN_OBSOLETE_CIPHER)); | |
1159 description_replacements.push_back( | |
1160 base::ASCIIToUTF16("AES_128_CBC with HMAC-SHA1")); | |
1161 base::string16 obsolete_description = l10n_util::GetStringFUTF16( | |
1162 IDS_OBSOLETE_SSL_DESCRIPTION, description_replacements, nullptr); | |
1163 | |
1164 EXPECT_EQ( | |
1165 obsolete_description, | |
1166 base::ASCIIToUTF16( | |
1167 observer.latest_explanations().info_explanations[0].description)); | |
1119 } | 1168 } |
1120 | 1169 |
1121 // After AddSCTUrlHandler() is called, requests to this hostname | 1170 // After AddSCTUrlHandler() is called, requests to this hostname |
1122 // will be served with Signed Certificate Timestamps. | 1171 // will be served with Signed Certificate Timestamps. |
1123 const char kMockHostnameWithSCTs[] = "example-scts.test"; | 1172 const char kMockHostnameWithSCTs[] = "example-scts.test"; |
1124 | 1173 |
1125 // URLRequestJobWithSCTs mocks a connection that includes a set of dummy | 1174 // URLRequestJobWithSCTs mocks a connection that includes a set of dummy |
1126 // SCTs with these statuses. | 1175 // SCTs with these statuses. |
1127 const std::vector<net::ct::SCTVerifyStatus> kTestSCTStatuses{ | 1176 const std::vector<net::ct::SCTVerifyStatus> kTestSCTStatuses{ |
1128 net::ct::SCT_STATUS_OK, net::ct::SCT_STATUS_LOG_UNKNOWN, | 1177 net::ct::SCT_STATUS_OK, net::ct::SCT_STATUS_LOG_UNKNOWN, |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1249 ChromeSecurityStateModelClient* model_client = | 1298 ChromeSecurityStateModelClient* model_client = |
1250 ChromeSecurityStateModelClient::FromWebContents(web_contents); | 1299 ChromeSecurityStateModelClient::FromWebContents(web_contents); |
1251 ASSERT_TRUE(model_client); | 1300 ASSERT_TRUE(model_client); |
1252 const SecurityStateModel::SecurityInfo& security_info = | 1301 const SecurityStateModel::SecurityInfo& security_info = |
1253 model_client->GetSecurityInfo(); | 1302 model_client->GetSecurityInfo(); |
1254 EXPECT_EQ(SecurityStateModel::SECURE, security_info.security_level); | 1303 EXPECT_EQ(SecurityStateModel::SECURE, security_info.security_level); |
1255 EXPECT_EQ(kTestSCTStatuses, security_info.sct_verify_statuses); | 1304 EXPECT_EQ(kTestSCTStatuses, security_info.sct_verify_statuses); |
1256 } | 1305 } |
1257 | 1306 |
1258 } // namespace | 1307 } // namespace |
OLD | NEW |