| 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 // This file includes code SSLClientSocketNSS::DoVerifyCertComplete() derived | 5 // This file includes code SSLClientSocketNSS::DoVerifyCertComplete() derived |
| 6 // from AuthCertificateCallback() in | 6 // from AuthCertificateCallback() in |
| 7 // mozilla/security/manager/ssl/src/nsNSSCallbacks.cpp. | 7 // mozilla/security/manager/ssl/src/nsNSSCallbacks.cpp. |
| 8 | 8 |
| 9 /* ***** BEGIN LICENSE BLOCK ***** | 9 /* ***** BEGIN LICENSE BLOCK ***** |
| 10 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | 10 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| (...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 CERT_DestroyCertList(cert_list); | 716 CERT_DestroyCertList(cert_list); |
| 717 } | 717 } |
| 718 | 718 |
| 719 // Finally create the X509Certificate object. | 719 // Finally create the X509Certificate object. |
| 720 cert_handle = CreateOSCert(server_cert_nss_->derCert); | 720 cert_handle = CreateOSCert(server_cert_nss_->derCert); |
| 721 DCHECK(cert_handle); | 721 DCHECK(cert_handle); |
| 722 server_cert_ = X509Certificate::CreateFromHandle( | 722 server_cert_ = X509Certificate::CreateFromHandle( |
| 723 cert_handle, | 723 cert_handle, |
| 724 X509Certificate::SOURCE_FROM_NETWORK, | 724 X509Certificate::SOURCE_FROM_NETWORK, |
| 725 intermediate_ca_certs); | 725 intermediate_ca_certs); |
| 726 X509Certificate::FreeOSCertHandle(cert_handle); |
| 726 for (size_t i = 0; i < intermediate_ca_certs.size(); ++i) | 727 for (size_t i = 0; i < intermediate_ca_certs.size(); ++i) |
| 727 X509Certificate::FreeOSCertHandle(intermediate_ca_certs[i]); | 728 X509Certificate::FreeOSCertHandle(intermediate_ca_certs[i]); |
| 728 #else | 729 #else |
| 729 server_cert_ = X509Certificate::CreateFromHandle( | 730 server_cert_ = X509Certificate::CreateFromHandle( |
| 730 CERT_DupCertificate(server_cert_nss_), | 731 server_cert_nss_, |
| 731 X509Certificate::SOURCE_FROM_NETWORK, | 732 X509Certificate::SOURCE_FROM_NETWORK, |
| 732 X509Certificate::OSCertHandles()); | 733 X509Certificate::OSCertHandles()); |
| 733 #endif | 734 #endif |
| 734 } | 735 } |
| 735 } | 736 } |
| 736 return server_cert_; | 737 return server_cert_; |
| 737 } | 738 } |
| 738 | 739 |
| 739 // Log an informational message if the server does not support secure | 740 // Log an informational message if the server does not support secure |
| 740 // renegotiation (RFC 5746). | 741 // renegotiation (RFC 5746). |
| (...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1250 PCCERT_CONTEXT cert_context2; | 1251 PCCERT_CONTEXT cert_context2; |
| 1251 BOOL ok = CertAddCertificateContextToStore(cert_store_, cert_context, | 1252 BOOL ok = CertAddCertificateContextToStore(cert_store_, cert_context, |
| 1252 CERT_STORE_ADD_USE_EXISTING, | 1253 CERT_STORE_ADD_USE_EXISTING, |
| 1253 &cert_context2); | 1254 &cert_context2); |
| 1254 if (!ok) { | 1255 if (!ok) { |
| 1255 NOTREACHED(); | 1256 NOTREACHED(); |
| 1256 continue; | 1257 continue; |
| 1257 } | 1258 } |
| 1258 scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle( | 1259 scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle( |
| 1259 cert_context2, X509Certificate::SOURCE_LONE_CERT_IMPORT, | 1260 cert_context2, X509Certificate::SOURCE_LONE_CERT_IMPORT, |
| 1260 net::X509Certificate::OSCertHandles()); | 1261 X509Certificate::OSCertHandles()); |
| 1262 X509Certificate::FreeOSCertHandle(cert_context2); |
| 1261 that->client_certs_.push_back(cert); | 1263 that->client_certs_.push_back(cert); |
| 1262 } | 1264 } |
| 1263 | 1265 |
| 1264 BOOL ok = CertCloseStore(my_cert_store, CERT_CLOSE_STORE_CHECK_FLAG); | 1266 BOOL ok = CertCloseStore(my_cert_store, CERT_CLOSE_STORE_CHECK_FLAG); |
| 1265 DCHECK(ok); | 1267 DCHECK(ok); |
| 1266 | 1268 |
| 1267 // Tell NSS to suspend the client authentication. We will then abort the | 1269 // Tell NSS to suspend the client authentication. We will then abort the |
| 1268 // handshake by returning ERR_SSL_CLIENT_AUTH_CERT_NEEDED. | 1270 // handshake by returning ERR_SSL_CLIENT_AUTH_CERT_NEEDED. |
| 1269 return SECWouldBlock; | 1271 return SECWouldBlock; |
| 1270 #elif defined(OS_MACOSX) | 1272 #elif defined(OS_MACOSX) |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1335 // Only check unexpired certs. | 1337 // Only check unexpired certs. |
| 1336 if (CERT_CheckCertValidTimes(cert, PR_Now(), PR_TRUE) == | 1338 if (CERT_CheckCertValidTimes(cert, PR_Now(), PR_TRUE) == |
| 1337 secCertTimeValid && (!ca_names->nnames || | 1339 secCertTimeValid && (!ca_names->nnames || |
| 1338 NSS_CmpCertChainWCANames(cert, ca_names) == SECSuccess)) { | 1340 NSS_CmpCertChainWCANames(cert, ca_names) == SECSuccess)) { |
| 1339 privkey = PK11_FindKeyByAnyCert(cert, wincx); | 1341 privkey = PK11_FindKeyByAnyCert(cert, wincx); |
| 1340 if (privkey) { | 1342 if (privkey) { |
| 1341 X509Certificate* x509_cert = X509Certificate::CreateFromHandle( | 1343 X509Certificate* x509_cert = X509Certificate::CreateFromHandle( |
| 1342 cert, X509Certificate::SOURCE_LONE_CERT_IMPORT, | 1344 cert, X509Certificate::SOURCE_LONE_CERT_IMPORT, |
| 1343 net::X509Certificate::OSCertHandles()); | 1345 net::X509Certificate::OSCertHandles()); |
| 1344 that->client_certs_.push_back(x509_cert); | 1346 that->client_certs_.push_back(x509_cert); |
| 1347 CERT_DestroyCertificate(cert); |
| 1345 SECKEY_DestroyPrivateKey(privkey); | 1348 SECKEY_DestroyPrivateKey(privkey); |
| 1346 continue; | 1349 continue; |
| 1347 } | 1350 } |
| 1348 } | 1351 } |
| 1349 CERT_DestroyCertificate(cert); | 1352 CERT_DestroyCertificate(cert); |
| 1350 } | 1353 } |
| 1351 CERT_FreeNicknames(names); | 1354 CERT_FreeNicknames(names); |
| 1352 } | 1355 } |
| 1353 | 1356 |
| 1354 // Tell NSS to suspend the client authentication. We will then abort the | 1357 // Tell NSS to suspend the client authentication. We will then abort the |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1542 PRErrorCode prerr = PR_GetError(); | 1545 PRErrorCode prerr = PR_GetError(); |
| 1543 if (prerr == PR_WOULD_BLOCK_ERROR) { | 1546 if (prerr == PR_WOULD_BLOCK_ERROR) { |
| 1544 LeaveFunction(""); | 1547 LeaveFunction(""); |
| 1545 return ERR_IO_PENDING; | 1548 return ERR_IO_PENDING; |
| 1546 } | 1549 } |
| 1547 LeaveFunction(""); | 1550 LeaveFunction(""); |
| 1548 return MapNSPRError(prerr); | 1551 return MapNSPRError(prerr); |
| 1549 } | 1552 } |
| 1550 | 1553 |
| 1551 } // namespace net | 1554 } // namespace net |
| OLD | NEW |