Index: net/ssl/client_cert_store_mac.cc |
diff --git a/net/ssl/client_cert_store_mac.cc b/net/ssl/client_cert_store_mac.cc |
index d94ab1856d04c6ee2a6a15cec9c9607642e65570..a3ef5899155d3a1f3fec7da227c3af7845724fd7 100644 |
--- a/net/ssl/client_cert_store_mac.cc |
+++ b/net/ssl/client_cert_store_mac.cc |
@@ -91,9 +91,12 @@ bool IsIssuedByInKeychain(const std::vector<std::string>& valid_issuers, |
DCHECK(cert); |
DCHECK(cert->get()); |
- X509Certificate::OSCertHandle cert_handle = (*cert)->os_cert_handle(); |
+ base::ScopedCFTypeRef<SecCertificateRef> os_cert( |
+ x509_util::CreateSecCertificateFromX509Certificate(cert->get())); |
+ if (!os_cert) |
+ return false; |
CFArrayRef cert_chain = NULL; |
- OSStatus result = CopyCertChain(cert_handle, &cert_chain); |
+ OSStatus result = CopyCertChain(os_cert.get(), &cert_chain); |
if (result) { |
OSSTATUS_LOG(ERROR, result) << "CopyCertChain error"; |
return false; |
@@ -102,7 +105,7 @@ bool IsIssuedByInKeychain(const std::vector<std::string>& valid_issuers, |
if (!cert_chain) |
return false; |
- X509Certificate::OSCertHandles intermediates; |
+ std::vector<SecCertificateRef> intermediates; |
for (CFIndex i = 1, chain_count = CFArrayGetCount(cert_chain); |
i < chain_count; ++i) { |
SecCertificateRef cert = reinterpret_cast<SecCertificateRef>( |
@@ -110,8 +113,9 @@ bool IsIssuedByInKeychain(const std::vector<std::string>& valid_issuers, |
intermediates.push_back(cert); |
} |
- scoped_refptr<X509Certificate> new_cert(X509Certificate::CreateFromHandle( |
- cert_handle, intermediates)); |
+ scoped_refptr<X509Certificate> new_cert( |
+ x509_util::CreateX509CertificateFromSecCertificate(os_cert.get(), |
+ intermediates)); |
CFRelease(cert_chain); // Also frees |intermediates|. |
if (!new_cert || !new_cert->IsIssuedByEncoded(valid_issuers)) |
@@ -193,7 +197,7 @@ void GetClientCertsImpl(const scoped_refptr<X509Certificate>& preferred_cert, |
selected_certs->clear(); |
for (size_t i = 0; i < preliminary_list.size(); ++i) { |
scoped_refptr<X509Certificate>& cert = preliminary_list[i]; |
- if (cert->HasExpired() || !SupportsSSLClientAuth(cert->os_cert_handle())) |
+ if (cert->HasExpired()) |
continue; |
// Skip duplicates (a cert may be in multiple keychains). |
@@ -287,9 +291,12 @@ void ClientCertStoreMac::GetClientCerts(const SSLCertRequestInfo& request, |
continue; |
ScopedCFTypeRef<SecCertificateRef> scoped_cert_handle(cert_handle); |
+ if (!SupportsSSLClientAuth(cert_handle)) |
+ continue; |
+ |
scoped_refptr<X509Certificate> cert( |
- X509Certificate::CreateFromHandle(cert_handle, |
- X509Certificate::OSCertHandles())); |
+ x509_util::CreateX509CertificateFromSecCertificate( |
+ cert_handle, std::vector<SecCertificateRef>())); |
if (!cert) |
continue; |