Index: net/socket/ssl_client_socket_nss.cc |
=================================================================== |
--- net/socket/ssl_client_socket_nss.cc (revision 48650) |
+++ net/socket/ssl_client_socket_nss.cc (working copy) |
@@ -656,6 +656,29 @@ |
return transport_->SetSendBufferSize(size); |
} |
+#if defined(OS_WIN) |
+// static |
+X509Certificate::OSCertHandle SSLClientSocketNSS::CreateOSCert( |
+ const SECItem& der_cert) { |
+ // TODO(wtc): close cert_store_ at shutdown. |
+ if (!cert_store_) |
+ cert_store_ = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, NULL, 0, NULL); |
+ |
+ X509Certificate::OSCertHandle cert_handle = NULL; |
+ BOOL ok = CertAddEncodedCertificateToStore( |
+ cert_store_, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, |
+ der_cert.data, der_cert.len, CERT_STORE_ADD_USE_EXISTING, &cert_handle); |
+ return ok ? cert_handle : NULL; |
+} |
+#elif defined(OS_MACOSX) |
+// static |
+X509Certificate::OSCertHandle SSLClientSocketNSS::CreateOSCert( |
+ const SECItem& der_cert) { |
+ return X509Certificate::CreateOSCertHandleFromBytes( |
+ reinterpret_cast<char*>(der_cert.data), der_cert.len); |
+} |
+#endif |
+ |
X509Certificate *SSLClientSocketNSS::UpdateServerCert() { |
// We set the server_cert_ from OwnAuthCertHandler(), but this handler |
// does not necessarily get called if we are continuing a cached SSL |
@@ -686,9 +709,7 @@ |
if (IsProblematicComodoEVCACert(*node->cert)) |
continue; |
#endif |
- cert_handle = X509Certificate::CreateOSCertHandleFromBytes( |
- reinterpret_cast<char*>(node->cert->derCert.data), |
- node->cert->derCert.len); |
+ cert_handle = CreateOSCert(node->cert->derCert); |
DCHECK(cert_handle); |
intermediate_ca_certs.push_back(cert_handle); |
} |
@@ -696,9 +717,7 @@ |
} |
// Finally create the X509Certificate object. |
- cert_handle = X509Certificate::CreateOSCertHandleFromBytes( |
- reinterpret_cast<char*>(server_cert_nss_->derCert.data), |
- server_cert_nss_->derCert.len); |
+ cert_handle = CreateOSCert(server_cert_nss_->derCert); |
DCHECK(cert_handle); |
server_cert_ = X509Certificate::CreateFromHandle( |
cert_handle, |