OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <cert.h> | 5 #include <cert.h> |
6 #include <pk11pub.h> | 6 #include <pk11pub.h> |
7 | 7 |
8 #include <algorithm> | 8 #include <algorithm> |
9 | 9 |
10 #include "base/crypto/scoped_nss_types.h" | 10 #include "base/crypto/scoped_nss_types.h" |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 std::string cert_data = ReadTestFile("root_ca_cert.crt"); | 177 std::string cert_data = ReadTestFile("root_ca_cert.crt"); |
178 | 178 |
179 CertificateList certs = | 179 CertificateList certs = |
180 X509Certificate::CreateCertificateListFromBytes( | 180 X509Certificate::CreateCertificateListFromBytes( |
181 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | 181 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); |
182 ASSERT_EQ(1U, certs.size()); | 182 ASSERT_EQ(1U, certs.size()); |
183 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 183 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
184 | 184 |
185 // Import it. | 185 // Import it. |
186 CertDatabase::ImportCertFailureList failed; | 186 CertDatabase::ImportCertFailureList failed; |
187 EXPECT_EQ(true, cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_SSL, | 187 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_SSL, |
188 &failed)); | 188 &failed)); |
189 | 189 |
190 EXPECT_EQ(0U, failed.size()); | 190 EXPECT_EQ(0U, failed.size()); |
191 | 191 |
192 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 192 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
193 ASSERT_EQ(1U, cert_list.size()); | 193 ASSERT_EQ(1U, cert_list.size()); |
194 scoped_refptr<X509Certificate> cert(cert_list[0]); | 194 scoped_refptr<X509Certificate> cert(cert_list[0]); |
195 EXPECT_EQ("Test CA", cert->subject().common_name); | 195 EXPECT_EQ("Test CA", cert->subject().common_name); |
196 | 196 |
197 EXPECT_EQ(CertDatabase::TRUSTED_SSL, | 197 EXPECT_EQ(CertDatabase::TRUSTED_SSL, |
198 cert_db_.GetCertTrust(cert.get(), CA_CERT)); | 198 cert_db_.GetCertTrust(cert.get(), CA_CERT)); |
(...skipping 10 matching lines...) Expand all Loading... |
209 std::string cert_data = ReadTestFile("root_ca_cert.crt"); | 209 std::string cert_data = ReadTestFile("root_ca_cert.crt"); |
210 | 210 |
211 CertificateList certs = | 211 CertificateList certs = |
212 X509Certificate::CreateCertificateListFromBytes( | 212 X509Certificate::CreateCertificateListFromBytes( |
213 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | 213 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); |
214 ASSERT_EQ(1U, certs.size()); | 214 ASSERT_EQ(1U, certs.size()); |
215 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 215 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
216 | 216 |
217 // Import it. | 217 // Import it. |
218 CertDatabase::ImportCertFailureList failed; | 218 CertDatabase::ImportCertFailureList failed; |
219 EXPECT_EQ(true, cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_EMAIL, | 219 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_EMAIL, |
220 &failed)); | 220 &failed)); |
221 | 221 |
222 EXPECT_EQ(0U, failed.size()); | 222 EXPECT_EQ(0U, failed.size()); |
223 | 223 |
224 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 224 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
225 ASSERT_EQ(1U, cert_list.size()); | 225 ASSERT_EQ(1U, cert_list.size()); |
226 scoped_refptr<X509Certificate> cert(cert_list[0]); | 226 scoped_refptr<X509Certificate> cert(cert_list[0]); |
227 EXPECT_EQ("Test CA", cert->subject().common_name); | 227 EXPECT_EQ("Test CA", cert->subject().common_name); |
228 | 228 |
229 EXPECT_EQ(CertDatabase::TRUSTED_EMAIL, | 229 EXPECT_EQ(CertDatabase::TRUSTED_EMAIL, |
230 cert_db_.GetCertTrust(cert.get(), CA_CERT)); | 230 cert_db_.GetCertTrust(cert.get(), CA_CERT)); |
231 | 231 |
232 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); | 232 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); |
233 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); | 233 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); |
234 EXPECT_TRUE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); | 234 EXPECT_TRUE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); |
235 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); | 235 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); |
236 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); | 236 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); |
237 } | 237 } |
238 | 238 |
239 TEST_F(CertDatabaseNSSTest, ImportCACert_ObjSignTrust) { | 239 TEST_F(CertDatabaseNSSTest, ImportCACert_ObjSignTrust) { |
240 std::string cert_data = ReadTestFile("root_ca_cert.crt"); | 240 std::string cert_data = ReadTestFile("root_ca_cert.crt"); |
241 | 241 |
242 CertificateList certs = | 242 CertificateList certs = |
243 X509Certificate::CreateCertificateListFromBytes( | 243 X509Certificate::CreateCertificateListFromBytes( |
244 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | 244 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); |
245 ASSERT_EQ(1U, certs.size()); | 245 ASSERT_EQ(1U, certs.size()); |
246 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 246 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
247 | 247 |
248 // Import it. | 248 // Import it. |
249 CertDatabase::ImportCertFailureList failed; | 249 CertDatabase::ImportCertFailureList failed; |
250 EXPECT_EQ(true, cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_OBJ_SIGN, | 250 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_OBJ_SIGN, |
251 &failed)); | 251 &failed)); |
252 | 252 |
253 EXPECT_EQ(0U, failed.size()); | 253 EXPECT_EQ(0U, failed.size()); |
254 | 254 |
255 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 255 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
256 ASSERT_EQ(1U, cert_list.size()); | 256 ASSERT_EQ(1U, cert_list.size()); |
257 scoped_refptr<X509Certificate> cert(cert_list[0]); | 257 scoped_refptr<X509Certificate> cert(cert_list[0]); |
258 EXPECT_EQ("Test CA", cert->subject().common_name); | 258 EXPECT_EQ("Test CA", cert->subject().common_name); |
259 | 259 |
260 EXPECT_EQ(CertDatabase::TRUSTED_OBJ_SIGN, | 260 EXPECT_EQ(CertDatabase::TRUSTED_OBJ_SIGN, |
261 cert_db_.GetCertTrust(cert.get(), CA_CERT)); | 261 cert_db_.GetCertTrust(cert.get(), CA_CERT)); |
262 | 262 |
263 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); | 263 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); |
264 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); | 264 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); |
265 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); | 265 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); |
266 EXPECT_TRUE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); | 266 EXPECT_TRUE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); |
267 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); | 267 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); |
268 } | 268 } |
269 | 269 |
270 TEST_F(CertDatabaseNSSTest, ImportCA_NotCACert) { | 270 TEST_F(CertDatabaseNSSTest, ImportCA_NotCACert) { |
271 std::string cert_data = ReadTestFile("google.single.pem"); | 271 std::string cert_data = ReadTestFile("google.single.pem"); |
272 | 272 |
273 CertificateList certs = | 273 CertificateList certs = |
274 X509Certificate::CreateCertificateListFromBytes( | 274 X509Certificate::CreateCertificateListFromBytes( |
275 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | 275 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); |
276 ASSERT_EQ(1U, certs.size()); | 276 ASSERT_EQ(1U, certs.size()); |
277 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 277 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
278 | 278 |
279 // Import it. | 279 // Import it. |
280 CertDatabase::ImportCertFailureList failed; | 280 CertDatabase::ImportCertFailureList failed; |
281 EXPECT_EQ(true, | 281 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_SSL, |
282 cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_SSL, &failed)); | 282 &failed)); |
283 ASSERT_EQ(1U, failed.size()); | 283 ASSERT_EQ(1U, failed.size()); |
284 // Note: this compares pointers directly. It's okay in this case because | 284 // Note: this compares pointers directly. It's okay in this case because |
285 // ImportCACerts returns the same pointers that were passed in. In the | 285 // ImportCACerts returns the same pointers that were passed in. In the |
286 // general case IsSameOSCert should be used. | 286 // general case IsSameOSCert should be used. |
287 EXPECT_EQ(certs[0], failed[0].certificate); | 287 EXPECT_EQ(certs[0], failed[0].certificate); |
288 EXPECT_EQ(ERR_IMPORT_CA_CERT_NOT_CA, failed[0].net_error); | 288 EXPECT_EQ(ERR_IMPORT_CA_CERT_NOT_CA, failed[0].net_error); |
289 | 289 |
290 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); | 290 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); |
291 } | 291 } |
292 | 292 |
293 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchy) { | 293 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchy) { |
294 CertificateList certs; | 294 CertificateList certs; |
295 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); | 295 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); |
296 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); | 296 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); |
297 ASSERT_TRUE(ReadCertIntoList("www_us_army_mil_cert.der", &certs)); | 297 ASSERT_TRUE(ReadCertIntoList("www_us_army_mil_cert.der", &certs)); |
298 | 298 |
299 // Import it. | 299 // Import it. |
300 CertDatabase::ImportCertFailureList failed; | 300 CertDatabase::ImportCertFailureList failed; |
301 // Have to specify email trust for the cert verification of the child cert to | 301 // Have to specify email trust for the cert verification of the child cert to |
302 // work (see | 302 // work (see |
303 // http://mxr.mozilla.org/mozilla/source/security/nss/lib/certhigh/certvfy.c#7
52 | 303 // http://mxr.mozilla.org/mozilla/source/security/nss/lib/certhigh/certvfy.c#7
52 |
304 // "XXX This choice of trustType seems arbitrary.") | 304 // "XXX This choice of trustType seems arbitrary.") |
305 EXPECT_EQ(true, cert_db_.ImportCACerts( | 305 EXPECT_TRUE(cert_db_.ImportCACerts( |
306 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL, | 306 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL, |
307 &failed)); | 307 &failed)); |
308 | 308 |
309 ASSERT_EQ(1U, failed.size()); | 309 ASSERT_EQ(1U, failed.size()); |
310 EXPECT_EQ("www.us.army.mil", failed[0].certificate->subject().common_name); | 310 EXPECT_EQ("www.us.army.mil", failed[0].certificate->subject().common_name); |
311 EXPECT_EQ(ERR_IMPORT_CA_CERT_NOT_CA, failed[0].net_error); | 311 EXPECT_EQ(ERR_IMPORT_CA_CERT_NOT_CA, failed[0].net_error); |
312 | 312 |
313 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 313 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
314 ASSERT_EQ(2U, cert_list.size()); | 314 ASSERT_EQ(2U, cert_list.size()); |
315 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); | 315 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); |
316 EXPECT_EQ("DOD CA-17", cert_list[1]->subject().common_name); | 316 EXPECT_EQ("DOD CA-17", cert_list[1]->subject().common_name); |
317 } | 317 } |
318 | 318 |
319 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyDupeRoot) { | 319 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyDupeRoot) { |
320 CertificateList certs; | 320 CertificateList certs; |
321 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); | 321 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); |
322 | 322 |
323 // First import just the root. | 323 // First import just the root. |
324 CertDatabase::ImportCertFailureList failed; | 324 CertDatabase::ImportCertFailureList failed; |
325 EXPECT_EQ(true, cert_db_.ImportCACerts( | 325 EXPECT_TRUE(cert_db_.ImportCACerts( |
326 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL, | 326 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL, |
327 &failed)); | 327 &failed)); |
328 | 328 |
329 EXPECT_EQ(0U, failed.size()); | 329 EXPECT_EQ(0U, failed.size()); |
330 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 330 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
331 ASSERT_EQ(1U, cert_list.size()); | 331 ASSERT_EQ(1U, cert_list.size()); |
332 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); | 332 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); |
333 | 333 |
334 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); | 334 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); |
335 ASSERT_TRUE(ReadCertIntoList("www_us_army_mil_cert.der", &certs)); | 335 ASSERT_TRUE(ReadCertIntoList("www_us_army_mil_cert.der", &certs)); |
336 | 336 |
337 // Now import with the other certs in the list too. Even though the root is | 337 // Now import with the other certs in the list too. Even though the root is |
338 // already present, we should still import the rest. | 338 // already present, we should still import the rest. |
339 failed.clear(); | 339 failed.clear(); |
340 EXPECT_EQ(true, cert_db_.ImportCACerts( | 340 EXPECT_TRUE(cert_db_.ImportCACerts( |
341 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL, | 341 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL, |
342 &failed)); | 342 &failed)); |
343 | 343 |
344 ASSERT_EQ(2U, failed.size()); | 344 ASSERT_EQ(2U, failed.size()); |
345 EXPECT_EQ("DoD Root CA 2", failed[0].certificate->subject().common_name); | 345 EXPECT_EQ("DoD Root CA 2", failed[0].certificate->subject().common_name); |
346 EXPECT_EQ(ERR_IMPORT_CERT_ALREADY_EXISTS, failed[0].net_error); | 346 EXPECT_EQ(ERR_IMPORT_CERT_ALREADY_EXISTS, failed[0].net_error); |
347 EXPECT_EQ("www.us.army.mil", failed[1].certificate->subject().common_name); | 347 EXPECT_EQ("www.us.army.mil", failed[1].certificate->subject().common_name); |
348 EXPECT_EQ(ERR_IMPORT_CA_CERT_NOT_CA, failed[1].net_error); | 348 EXPECT_EQ(ERR_IMPORT_CA_CERT_NOT_CA, failed[1].net_error); |
349 | 349 |
350 cert_list = ListCertsInSlot(slot_->os_module_handle()); | 350 cert_list = ListCertsInSlot(slot_->os_module_handle()); |
351 ASSERT_EQ(2U, cert_list.size()); | 351 ASSERT_EQ(2U, cert_list.size()); |
352 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); | 352 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); |
353 EXPECT_EQ("DOD CA-17", cert_list[1]->subject().common_name); | 353 EXPECT_EQ("DOD CA-17", cert_list[1]->subject().common_name); |
354 } | 354 } |
355 | 355 |
356 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyUntrusted) { | 356 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyUntrusted) { |
357 CertificateList certs; | 357 CertificateList certs; |
358 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); | 358 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); |
359 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); | 359 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); |
360 | 360 |
361 // Import it. | 361 // Import it. |
362 CertDatabase::ImportCertFailureList failed; | 362 CertDatabase::ImportCertFailureList failed; |
363 EXPECT_EQ(true, cert_db_.ImportCACerts(certs, CertDatabase::UNTRUSTED, | 363 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::UNTRUSTED, &failed)); |
364 &failed)); | |
365 | 364 |
366 ASSERT_EQ(1U, failed.size()); | 365 ASSERT_EQ(1U, failed.size()); |
367 EXPECT_EQ("DOD CA-17", failed[0].certificate->subject().common_name); | 366 EXPECT_EQ("DOD CA-17", failed[0].certificate->subject().common_name); |
368 // TODO(mattm): should check for net error equivalent of | 367 // TODO(mattm): should check for net error equivalent of |
369 // SEC_ERROR_UNTRUSTED_ISSUER | 368 // SEC_ERROR_UNTRUSTED_ISSUER |
370 EXPECT_EQ(ERR_FAILED, failed[0].net_error); | 369 EXPECT_EQ(ERR_FAILED, failed[0].net_error); |
371 | 370 |
372 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 371 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
373 ASSERT_EQ(1U, cert_list.size()); | 372 ASSERT_EQ(1U, cert_list.size()); |
374 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); | 373 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); |
375 } | 374 } |
376 | 375 |
377 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyTree) { | 376 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyTree) { |
378 CertificateList certs; | 377 CertificateList certs; |
379 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); | 378 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); |
380 ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs)); | 379 ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs)); |
381 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); | 380 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); |
382 | 381 |
383 // Import it. | 382 // Import it. |
384 CertDatabase::ImportCertFailureList failed; | 383 CertDatabase::ImportCertFailureList failed; |
385 EXPECT_EQ(true, cert_db_.ImportCACerts( | 384 EXPECT_TRUE(cert_db_.ImportCACerts( |
386 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL, | 385 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL, |
387 &failed)); | 386 &failed)); |
388 | 387 |
389 EXPECT_EQ(0U, failed.size()); | 388 EXPECT_EQ(0U, failed.size()); |
390 | 389 |
391 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 390 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
392 ASSERT_EQ(3U, cert_list.size()); | 391 ASSERT_EQ(3U, cert_list.size()); |
393 EXPECT_EQ("DOD CA-13", cert_list[0]->subject().common_name); | 392 EXPECT_EQ("DOD CA-13", cert_list[0]->subject().common_name); |
394 EXPECT_EQ("DoD Root CA 2", cert_list[1]->subject().common_name); | 393 EXPECT_EQ("DoD Root CA 2", cert_list[1]->subject().common_name); |
395 EXPECT_EQ("DOD CA-17", cert_list[2]->subject().common_name); | 394 EXPECT_EQ("DOD CA-17", cert_list[2]->subject().common_name); |
396 } | 395 } |
397 | 396 |
398 TEST_F(CertDatabaseNSSTest, ImportCACertNotHierarchy) { | 397 TEST_F(CertDatabaseNSSTest, ImportCACertNotHierarchy) { |
399 std::string cert_data = ReadTestFile("root_ca_cert.crt"); | 398 std::string cert_data = ReadTestFile("root_ca_cert.crt"); |
400 CertificateList certs = | 399 CertificateList certs = |
401 X509Certificate::CreateCertificateListFromBytes( | 400 X509Certificate::CreateCertificateListFromBytes( |
402 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | 401 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); |
403 ASSERT_EQ(1U, certs.size()); | 402 ASSERT_EQ(1U, certs.size()); |
404 ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs)); | 403 ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs)); |
405 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); | 404 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); |
406 | 405 |
407 // Import it. | 406 // Import it. |
408 CertDatabase::ImportCertFailureList failed; | 407 CertDatabase::ImportCertFailureList failed; |
409 EXPECT_EQ(true, cert_db_.ImportCACerts( | 408 EXPECT_TRUE(cert_db_.ImportCACerts( |
410 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL | | 409 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL | |
411 CertDatabase::TRUSTED_OBJ_SIGN, &failed)); | 410 CertDatabase::TRUSTED_OBJ_SIGN, &failed)); |
412 | 411 |
413 ASSERT_EQ(2U, failed.size()); | 412 ASSERT_EQ(2U, failed.size()); |
414 // TODO(mattm): should check for net error equivalent of | 413 // TODO(mattm): should check for net error equivalent of |
415 // SEC_ERROR_UNKNOWN_ISSUER | 414 // SEC_ERROR_UNKNOWN_ISSUER |
416 EXPECT_EQ("DOD CA-13", failed[0].certificate->subject().common_name); | 415 EXPECT_EQ("DOD CA-13", failed[0].certificate->subject().common_name); |
417 EXPECT_EQ(ERR_FAILED, failed[0].net_error); | 416 EXPECT_EQ(ERR_FAILED, failed[0].net_error); |
418 EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name); | 417 EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name); |
419 EXPECT_EQ(ERR_FAILED, failed[1].net_error); | 418 EXPECT_EQ(ERR_FAILED, failed[1].net_error); |
420 | 419 |
421 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 420 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
422 ASSERT_EQ(1U, cert_list.size()); | 421 ASSERT_EQ(1U, cert_list.size()); |
423 EXPECT_EQ("Test CA", cert_list[0]->subject().common_name); | 422 EXPECT_EQ("Test CA", cert_list[0]->subject().common_name); |
424 } | 423 } |
425 | 424 |
426 TEST_F(CertDatabaseNSSTest, ImportServerCert) { | 425 TEST_F(CertDatabaseNSSTest, ImportServerCert) { |
427 // Need to import intermediate cert for the verify of google cert, otherwise | 426 // Need to import intermediate cert for the verify of google cert, otherwise |
428 // it will try to fetch it automatically with cert_pi_useAIACertFetch, which | 427 // it will try to fetch it automatically with cert_pi_useAIACertFetch, which |
429 // will cause OCSPCreateSession on the main thread, which is not allowed. | 428 // will cause OCSPCreateSession on the main thread, which is not allowed. |
430 std::string cert_data = ReadTestFile("google.chain.pem"); | 429 std::string cert_data = ReadTestFile("google.chain.pem"); |
431 CertificateList certs = | 430 CertificateList certs = |
432 X509Certificate::CreateCertificateListFromBytes( | 431 X509Certificate::CreateCertificateListFromBytes( |
433 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | 432 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); |
434 ASSERT_EQ(2U, certs.size()); | 433 ASSERT_EQ(2U, certs.size()); |
435 | 434 |
436 CertDatabase::ImportCertFailureList failed; | 435 CertDatabase::ImportCertFailureList failed; |
437 EXPECT_EQ(true, cert_db_.ImportServerCert(certs, &failed)); | 436 EXPECT_TRUE(cert_db_.ImportServerCert(certs, &failed)); |
438 | 437 |
439 EXPECT_EQ(0U, failed.size()); | 438 EXPECT_EQ(0U, failed.size()); |
440 | 439 |
441 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 440 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
442 ASSERT_EQ(2U, cert_list.size()); | 441 ASSERT_EQ(2U, cert_list.size()); |
443 scoped_refptr<X509Certificate> goog_cert(cert_list[0]); | 442 scoped_refptr<X509Certificate> goog_cert(cert_list[0]); |
444 scoped_refptr<X509Certificate> thawte_cert(cert_list[1]); | 443 scoped_refptr<X509Certificate> thawte_cert(cert_list[1]); |
445 EXPECT_EQ("www.google.com", goog_cert->subject().common_name); | 444 EXPECT_EQ("www.google.com", goog_cert->subject().common_name); |
446 EXPECT_EQ("Thawte SGC CA", thawte_cert->subject().common_name); | 445 EXPECT_EQ("Thawte SGC CA", thawte_cert->subject().common_name); |
447 | 446 |
448 EXPECT_EQ(CertDatabase::UNTRUSTED, | 447 EXPECT_EQ(CertDatabase::UNTRUSTED, |
449 cert_db_.GetCertTrust(goog_cert.get(), SERVER_CERT)); | 448 cert_db_.GetCertTrust(goog_cert.get(), SERVER_CERT)); |
450 psm::nsNSSCertTrust goog_trust(goog_cert->os_cert_handle()->trust); | 449 psm::nsNSSCertTrust goog_trust(goog_cert->os_cert_handle()->trust); |
451 EXPECT_TRUE(goog_trust.HasPeer(PR_TRUE, PR_TRUE, PR_TRUE)); | 450 EXPECT_TRUE(goog_trust.HasPeer(PR_TRUE, PR_TRUE, PR_TRUE)); |
452 | 451 |
453 int flags = 0; | 452 int flags = 0; |
454 CertVerifyResult verify_result; | 453 CertVerifyResult verify_result; |
455 int error = goog_cert->Verify("www.google.com", flags, &verify_result); | 454 int error = goog_cert->Verify("www.google.com", flags, &verify_result); |
456 EXPECT_EQ(OK, error); | 455 EXPECT_EQ(OK, error); |
457 EXPECT_EQ(0, verify_result.cert_status); | 456 EXPECT_EQ(0, verify_result.cert_status); |
458 } | 457 } |
459 | 458 |
460 TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned) { | 459 TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned) { |
461 CertificateList certs; | 460 CertificateList certs; |
462 ASSERT_TRUE(ReadCertIntoList("punycodetest.der", &certs)); | 461 ASSERT_TRUE(ReadCertIntoList("punycodetest.der", &certs)); |
463 | 462 |
464 CertDatabase::ImportCertFailureList failed; | 463 CertDatabase::ImportCertFailureList failed; |
465 EXPECT_EQ(true, cert_db_.ImportServerCert(certs, &failed)); | 464 EXPECT_TRUE(cert_db_.ImportServerCert(certs, &failed)); |
466 | 465 |
467 EXPECT_EQ(0U, failed.size()); | 466 EXPECT_EQ(0U, failed.size()); |
468 | 467 |
469 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 468 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
470 ASSERT_EQ(1U, cert_list.size()); | 469 ASSERT_EQ(1U, cert_list.size()); |
471 scoped_refptr<X509Certificate> puny_cert(cert_list[0]); | 470 scoped_refptr<X509Certificate> puny_cert(cert_list[0]); |
472 | 471 |
473 EXPECT_EQ(CertDatabase::UNTRUSTED, | 472 EXPECT_EQ(CertDatabase::UNTRUSTED, |
474 cert_db_.GetCertTrust(puny_cert.get(), SERVER_CERT)); | 473 cert_db_.GetCertTrust(puny_cert.get(), SERVER_CERT)); |
475 psm::nsNSSCertTrust puny_trust(puny_cert->os_cert_handle()->trust); | 474 psm::nsNSSCertTrust puny_trust(puny_cert->os_cert_handle()->trust); |
(...skipping 11 matching lines...) Expand all Loading... |
487 puny_cert.get(), CA_CERT, | 486 puny_cert.get(), CA_CERT, |
488 CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL)); | 487 CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL)); |
489 | 488 |
490 verify_result.Reset(); | 489 verify_result.Reset(); |
491 error = puny_cert->Verify("xn--wgv71a119e.com", flags, &verify_result); | 490 error = puny_cert->Verify("xn--wgv71a119e.com", flags, &verify_result); |
492 EXPECT_EQ(OK, error); | 491 EXPECT_EQ(OK, error); |
493 EXPECT_EQ(0, verify_result.cert_status); | 492 EXPECT_EQ(0, verify_result.cert_status); |
494 } | 493 } |
495 | 494 |
496 } // namespace net | 495 } // namespace net |
OLD | NEW |