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

Side by Side Diff: ios/web/net/crw_cert_verification_controller_unittest.mm

Issue 2225483002: [ios] Removed CertVerifierBlockAdapter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Self review Created 4 years, 4 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 unified diff | Download patch
OLDNEW
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 "ios/web/net/crw_cert_verification_controller.h" 5 #include "ios/web/net/crw_cert_verification_controller.h"
6 6
7 #include "base/mac/bind_objc_block.h" 7 #include "base/mac/bind_objc_block.h"
8 #include "base/mac/scoped_nsobject.h" 8 #include "base/mac/scoped_nsobject.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/test/ios/wait_util.h" 10 #include "base/test/ios/wait_util.h"
11 #include "ios/web/public/test/web_test.h" 11 #include "ios/web/public/test/web_test.h"
12 #include "ios/web/public/web_thread.h" 12 #include "ios/web/public/web_thread.h"
13 #import "ios/web/web_state/wk_web_view_security_util.h" 13 #import "ios/web/web_state/wk_web_view_security_util.h"
14 #include "net/cert/mock_cert_verifier.h" 14 #include "net/cert/mock_cert_verifier.h"
15 #include "net/cert/x509_certificate.h" 15 #include "net/cert/x509_certificate.h"
16 #include "net/test/cert_test_util.h" 16 #include "net/test/cert_test_util.h"
17 #include "net/test/test_data_directory.h" 17 #include "net/test/test_data_directory.h"
18 #include "net/url_request/url_request_context.h"
19 #include "net/url_request/url_request_context_getter.h"
20 18
21 namespace web { 19 namespace web {
22 20
23 namespace { 21 namespace {
24 // Generated cert filename. 22 // Generated cert filename.
25 const char kCertFileName[] = "ok_cert.pem"; 23 const char kCertFileName[] = "ok_cert.pem";
26 // Test hostname for cert verification. 24 // Test hostname for cert verification.
27 NSString* const kHostName = @"www.example.com"; 25 NSString* const kHostName = @"www.example.com";
28 } // namespace 26 } // namespace
29 27
30 // Test fixture to test CRWCertVerificationController class. 28 // Test fixture to test CRWCertVerificationController class.
31 class CRWCertVerificationControllerTest : public web::WebTest { 29 class CRWCertVerificationControllerTest : public web::WebTest {
32 protected: 30 protected:
33 void SetUp() override { 31 void SetUp() override {
34 web::WebTest::SetUp(); 32 web::WebTest::SetUp();
35 33
36 web::BrowserState* browser_state = GetBrowserState();
37 net::URLRequestContextGetter* getter = browser_state->GetRequestContext();
38 web::WebThread::PostTask(web::WebThread::IO, FROM_HERE, base::BindBlock(^{
39 getter->GetURLRequestContext()->set_cert_verifier(&cert_verifier_);
40 }));
41
42 controller_.reset([[CRWCertVerificationController alloc] 34 controller_.reset([[CRWCertVerificationController alloc]
43 initWithBrowserState:browser_state]); 35 initWithBrowserState:GetBrowserState()]);
44 cert_ = 36 cert_ =
45 net::ImportCertFromFile(net::GetTestCertsDirectory(), kCertFileName); 37 net::ImportCertFromFile(net::GetTestCertsDirectory(), kCertFileName);
46 ASSERT_TRUE(cert_); 38 ASSERT_TRUE(cert_);
47 39
48 NSArray* chain = GetChain(cert_); 40 NSArray* chain = GetChain(cert_);
49 valid_trust_ = web::CreateServerTrustFromChain(chain, kHostName); 41 valid_trust_ = web::CreateServerTrustFromChain(chain, kHostName);
50 web::EnsureFutureTrustEvaluationSucceeds(valid_trust_.get()); 42 web::EnsureFutureTrustEvaluationSucceeds(valid_trust_.get());
51 invalid_trust_ = web::CreateServerTrustFromChain(chain, kHostName); 43 invalid_trust_ = web::CreateServerTrustFromChain(chain, kHostName);
52 } 44 }
53 45
54 void TearDown() override {
55 [controller_ shutDown];
56 web::WebTest::TearDown();
57 }
58
59 // Returns NSArray of SecCertificateRef objects for the given |cert|. 46 // Returns NSArray of SecCertificateRef objects for the given |cert|.
60 NSArray* GetChain(const scoped_refptr<net::X509Certificate>& cert) const { 47 NSArray* GetChain(const scoped_refptr<net::X509Certificate>& cert) const {
61 NSMutableArray* result = [NSMutableArray 48 NSMutableArray* result = [NSMutableArray
62 arrayWithObject:static_cast<id>(cert->os_cert_handle())]; 49 arrayWithObject:static_cast<id>(cert->os_cert_handle())];
63 for (SecCertificateRef intermediate : cert->GetIntermediateCertificates()) { 50 for (SecCertificateRef intermediate : cert->GetIntermediateCertificates()) {
64 [result addObject:static_cast<id>(intermediate)]; 51 [result addObject:static_cast<id>(intermediate)];
65 } 52 }
66 return result; 53 return result;
67 } 54 }
68 55
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 completion_handler_called = true; 90 completion_handler_called = true;
104 }]; 91 }];
105 base::test::ios::WaitUntilCondition(^{ 92 base::test::ios::WaitUntilCondition(^{
106 return completion_handler_called; 93 return completion_handler_called;
107 }, base::MessageLoop::current(), base::TimeDelta()); 94 }, base::MessageLoop::current(), base::TimeDelta());
108 } 95 }
109 96
110 scoped_refptr<net::X509Certificate> cert_; 97 scoped_refptr<net::X509Certificate> cert_;
111 base::ScopedCFTypeRef<SecTrustRef> valid_trust_; 98 base::ScopedCFTypeRef<SecTrustRef> valid_trust_;
112 base::ScopedCFTypeRef<SecTrustRef> invalid_trust_; 99 base::ScopedCFTypeRef<SecTrustRef> invalid_trust_;
113 net::MockCertVerifier cert_verifier_;
114 base::scoped_nsobject<CRWCertVerificationController> controller_; 100 base::scoped_nsobject<CRWCertVerificationController> controller_;
115 }; 101 };
116 102
117 // Tests cert policy with a valid trust. 103 // Tests cert policy with a valid trust.
118 TEST_F(CRWCertVerificationControllerTest, PolicyForValidTrust) { 104 TEST_F(CRWCertVerificationControllerTest, PolicyForValidTrust) {
119 net::CertVerifyResult verify_result; 105 net::CertVerifyResult verify_result;
120 verify_result.cert_status = net::CERT_STATUS_NO_REVOCATION_MECHANISM; 106 verify_result.cert_status = net::CERT_STATUS_NO_REVOCATION_MECHANISM;
121 verify_result.verified_cert = cert_; 107 verify_result.verified_cert = cert_;
Ryan Sleevi 2016/08/08 17:47:37 Unused?
Eugene But (OOO till 7-30) 2016/08/08 20:22:23 Done.
122 cert_verifier_.AddResultForCertAndHost(cert_.get(), kHostName.UTF8String,
123 verify_result, net::OK);
124 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR; 108 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR;
125 net::CertStatus status; 109 net::CertStatus status;
126 DecidePolicy(valid_trust_, kHostName, &policy, &status); 110 DecidePolicy(valid_trust_, kHostName, &policy, &status);
127 EXPECT_EQ(CERT_ACCEPT_POLICY_ALLOW, policy); 111 EXPECT_EQ(CERT_ACCEPT_POLICY_ALLOW, policy);
128 EXPECT_FALSE(status); 112 EXPECT_FALSE(status);
129 } 113 }
130 114
131 // Tests cert policy with an invalid trust not accepted by user. 115 // Tests cert policy with an invalid trust not accepted by user.
132 TEST_F(CRWCertVerificationControllerTest, PolicyForInvalidTrust) { 116 TEST_F(CRWCertVerificationControllerTest, PolicyForInvalidTrust) {
133 net::CertVerifyResult result; 117 net::CertVerifyResult result;
134 result.cert_status = net::CERT_STATUS_COMMON_NAME_INVALID; 118 result.cert_status = net::CERT_STATUS_COMMON_NAME_INVALID;
135 result.verified_cert = cert_; 119 result.verified_cert = cert_;
Ryan Sleevi 2016/08/08 17:47:37 Unused?
Eugene But (OOO till 7-30) 2016/08/08 20:22:23 Done.
136 cert_verifier_.AddResultForCertAndHost(cert_.get(), kHostName.UTF8String,
137 result,
138 net::ERR_CERT_COMMON_NAME_INVALID);
139
140 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR; 120 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR;
141 net::CertStatus status; 121 net::CertStatus status;
142 DecidePolicy(invalid_trust_, kHostName, &policy, &status); 122 DecidePolicy(invalid_trust_, kHostName, &policy, &status);
143 EXPECT_EQ(CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_UNDECIDED_BY_USER, policy); 123 EXPECT_EQ(CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_UNDECIDED_BY_USER, policy);
144 EXPECT_EQ(net::CERT_STATUS_COMMON_NAME_INVALID, status); 124 EXPECT_TRUE(net::CERT_STATUS_AUTHORITY_INVALID & status);
125 EXPECT_TRUE(net::CERT_STATUS_INVALID & status);
145 } 126 }
146 127
147 // Tests cert policy with an invalid trust accepted by user. 128 // Tests cert policy with an invalid trust accepted by user.
148 TEST_F(CRWCertVerificationControllerTest, PolicyForInvalidTrustAcceptedByUser) { 129 TEST_F(CRWCertVerificationControllerTest, PolicyForInvalidTrustAcceptedByUser) {
149 net::CertVerifyResult result; 130 net::CertVerifyResult result;
150 result.cert_status = net::CERT_STATUS_DATE_INVALID; 131 result.cert_status = net::CERT_STATUS_DATE_INVALID;
151 result.verified_cert = cert_; 132 result.verified_cert = cert_;
Ryan Sleevi 2016/08/08 17:47:37 Unused?
Eugene But (OOO till 7-30) 2016/08/08 20:22:23 Done.
152 cert_verifier_.AddResultForCertAndHost(cert_.get(), kHostName.UTF8String,
153 result, net::ERR_CERT_DATE_INVALID);
154 133
155 [controller_ allowCert:cert_.get() 134 [controller_ allowCert:cert_.get()
156 forHost:kHostName 135 forHost:kHostName
157 status:net::CERT_STATUS_ALL_ERRORS]; 136 status:net::CERT_STATUS_ALL_ERRORS];
158 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR; 137 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR;
159 net::CertStatus status; 138 net::CertStatus status;
160 DecidePolicy(invalid_trust_, kHostName, &policy, &status); 139 DecidePolicy(invalid_trust_, kHostName, &policy, &status);
161 EXPECT_EQ(CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_ACCEPTED_BY_USER, policy); 140 EXPECT_EQ(CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_ACCEPTED_BY_USER, policy);
162 EXPECT_EQ(net::CERT_STATUS_DATE_INVALID, status); 141 EXPECT_TRUE(net::CERT_STATUS_AUTHORITY_INVALID & status);
163 } 142 EXPECT_TRUE(net::CERT_STATUS_INVALID & status);
164
165 // Tests cert policy with an invalid trust when CertVerifier considers cert as
166 // valid.
167 TEST_F(CRWCertVerificationControllerTest,
168 PolicyForInvalidTrustWithNoErrorFromCertVerifier) {
169 net::CertVerifyResult result;
170 result.verified_cert = cert_;
171 cert_verifier_.AddResultForCertAndHost(cert_.get(), kHostName.UTF8String,
172 result, net::OK);
173
174 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR;
175 net::CertStatus status;
176 DecidePolicy(invalid_trust_, kHostName, &policy, &status);
177 EXPECT_EQ(CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_UNDECIDED_BY_USER, policy);
178 EXPECT_EQ(net::CERT_STATUS_INVALID, status);
179 } 143 }
180 144
181 // Tests that allowCert:forHost:status: strips all intermidiate certs. 145 // Tests that allowCert:forHost:status: strips all intermidiate certs.
Ryan Sleevi 2016/08/08 17:47:37 typo: intermediate
Eugene But (OOO till 7-30) 2016/08/08 20:22:23 Done.
182 TEST_F(CRWCertVerificationControllerTest, AllowCertIgnoresIntermidiateCerts) { 146 TEST_F(CRWCertVerificationControllerTest, AllowCertIgnoresIntermidiateCerts) {
183 scoped_refptr<net::X509Certificate> cert( 147 scoped_refptr<net::X509Certificate> cert(
184 net::X509Certificate::CreateFromHandle(cert_->os_cert_handle(), 148 net::X509Certificate::CreateFromHandle(cert_->os_cert_handle(),
185 {cert_->os_cert_handle()})); 149 {cert_->os_cert_handle()}));
186 net::CertVerifyResult result; 150 net::CertVerifyResult result;
187 result.cert_status = net::CERT_STATUS_DATE_INVALID; 151 result.cert_status = net::CERT_STATUS_DATE_INVALID;
188 result.verified_cert = cert_; 152 result.verified_cert = cert_;
Ryan Sleevi 2016/08/08 17:47:37 Unused?
Eugene But (OOO till 7-30) 2016/08/08 20:22:23 Done.
189 cert_verifier_.AddResultForCertAndHost(cert_.get(), kHostName.UTF8String,
190 result, net::ERR_CERT_DATE_INVALID);
191 153
192 [controller_ allowCert:cert.get() 154 [controller_ allowCert:cert.get()
193 forHost:kHostName 155 forHost:kHostName
194 status:net::CERT_STATUS_ALL_ERRORS]; 156 status:net::CERT_STATUS_ALL_ERRORS];
195 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR; 157 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR;
196 net::CertStatus status; 158 net::CertStatus status;
197 DecidePolicy(invalid_trust_, kHostName, &policy, &status); 159 DecidePolicy(invalid_trust_, kHostName, &policy, &status);
198 EXPECT_EQ(CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_ACCEPTED_BY_USER, policy); 160 EXPECT_EQ(CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_ACCEPTED_BY_USER, policy);
199 EXPECT_EQ(net::CERT_STATUS_DATE_INVALID, status); 161 EXPECT_TRUE(net::CERT_STATUS_AUTHORITY_INVALID & status);
162 EXPECT_TRUE(net::CERT_STATUS_INVALID & status);
200 } 163 }
201 164
202 // Tests cert policy with null trust. 165 // Tests cert policy with null trust.
203 TEST_F(CRWCertVerificationControllerTest, PolicyForNullTrust) { 166 TEST_F(CRWCertVerificationControllerTest, PolicyForNullTrust) {
204 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_ALLOW; 167 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_ALLOW;
205 net::CertStatus status; 168 net::CertStatus status;
206 base::ScopedCFTypeRef<SecTrustRef> null_trust; 169 base::ScopedCFTypeRef<SecTrustRef> null_trust;
207 DecidePolicy(null_trust, kHostName, &policy, &status); 170 DecidePolicy(null_trust, kHostName, &policy, &status);
208 EXPECT_EQ(CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR, policy); 171 EXPECT_EQ(CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR, policy);
209 EXPECT_EQ(net::CERT_STATUS_INVALID, status); 172 EXPECT_EQ(net::CERT_STATUS_INVALID, status);
210 } 173 }
211 174
212 // Tests cert policy with invalid trust and null host. 175 // Tests cert policy with invalid trust and null host.
213 TEST_F(CRWCertVerificationControllerTest, PolicyForNullHost) { 176 TEST_F(CRWCertVerificationControllerTest, PolicyForNullHost) {
214 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR; 177 web::CertAcceptPolicy policy = CERT_ACCEPT_POLICY_NON_RECOVERABLE_ERROR;
215 net::CertStatus status; 178 net::CertStatus status;
216 DecidePolicy(invalid_trust_, nil, &policy, &status); 179 DecidePolicy(invalid_trust_, nil, &policy, &status);
217 EXPECT_EQ(CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_UNDECIDED_BY_USER, policy); 180 EXPECT_EQ(CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_UNDECIDED_BY_USER, policy);
218 EXPECT_EQ(net::CERT_STATUS_INVALID, status); 181 EXPECT_TRUE(net::CERT_STATUS_AUTHORITY_INVALID & status);
182 EXPECT_TRUE(net::CERT_STATUS_INVALID & status);
219 } 183 }
220 184
221 // Tests SSL status with valid trust. 185 // Tests SSL status with valid trust.
222 TEST_F(CRWCertVerificationControllerTest, SSLStatusForValidTrust) { 186 TEST_F(CRWCertVerificationControllerTest, SSLStatusForValidTrust) {
223 SecurityStyle style = SECURITY_STYLE_UNKNOWN; 187 SecurityStyle style = SECURITY_STYLE_UNKNOWN;
224 net::CertStatus status = net::CERT_STATUS_ALL_ERRORS; 188 net::CertStatus status = net::CERT_STATUS_ALL_ERRORS;
225 189
226 QueryStatus(valid_trust_, kHostName, &style, &status); 190 QueryStatus(valid_trust_, kHostName, &style, &status);
227 EXPECT_EQ(SECURITY_STYLE_AUTHENTICATED, style); 191 EXPECT_EQ(SECURITY_STYLE_AUTHENTICATED, style);
228 EXPECT_FALSE(status); 192 EXPECT_FALSE(status);
229 } 193 }
230 194
231 // Tests SSL status with invalid host. 195 // Tests SSL status with invalid host.
232 TEST_F(CRWCertVerificationControllerTest, SSLStatusForInvalidHost) { 196 TEST_F(CRWCertVerificationControllerTest, SSLStatusForInvalidTrust) {
233 net::CertVerifyResult result; 197 net::CertVerifyResult result;
234 result.cert_status = net::CERT_STATUS_COMMON_NAME_INVALID; 198 result.cert_status = net::CERT_STATUS_COMMON_NAME_INVALID;
235 result.verified_cert = cert_; 199 result.verified_cert = cert_;
Ryan Sleevi 2016/08/08 17:47:37 Unused?
Eugene But (OOO till 7-30) 2016/08/08 20:22:23 Done.
236 cert_verifier_.AddResultForCertAndHost(cert_.get(), kHostName.UTF8String,
237 result,
238 net::ERR_CERT_COMMON_NAME_INVALID);
239 200
240 SecurityStyle style = SECURITY_STYLE_UNKNOWN; 201 SecurityStyle style = SECURITY_STYLE_UNKNOWN;
241 net::CertStatus status = net::CERT_STATUS_ALL_ERRORS; 202 net::CertStatus status = net::CERT_STATUS_ALL_ERRORS;
242 203
243 QueryStatus(invalid_trust_, kHostName, &style, &status); 204 QueryStatus(invalid_trust_, kHostName, &style, &status);
244 EXPECT_EQ(SECURITY_STYLE_AUTHENTICATION_BROKEN, style); 205 EXPECT_EQ(SECURITY_STYLE_AUTHENTICATION_BROKEN, style);
245 EXPECT_EQ(status, net::CERT_STATUS_COMMON_NAME_INVALID); 206 EXPECT_TRUE(net::CERT_STATUS_AUTHORITY_INVALID & status);
246 } 207 EXPECT_TRUE(net::CERT_STATUS_INVALID & status);
247
248 // Tests SSL status with expired cert.
249 TEST_F(CRWCertVerificationControllerTest, SSLStatusForExpiredTrust) {
250 net::CertVerifyResult result;
251 result.cert_status = net::CERT_STATUS_DATE_INVALID;
252 result.verified_cert = cert_;
253 cert_verifier_.AddResultForCertAndHost(cert_.get(), kHostName.UTF8String,
254 result, net::ERR_CERT_DATE_INVALID);
255
256 SecurityStyle style = SECURITY_STYLE_UNKNOWN;
257 net::CertStatus status = net::CERT_STATUS_ALL_ERRORS;
258
259 QueryStatus(invalid_trust_, kHostName, &style, &status);
260 EXPECT_EQ(SECURITY_STYLE_AUTHENTICATION_BROKEN, style);
261 EXPECT_EQ(net::CERT_STATUS_DATE_INVALID, status);
262 } 208 }
263 209
264 } // namespace web 210 } // namespace web
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698