42 HCERTSTORE hStore = CertOpenSystemStore(0, TEXT(
"ROOT"));
43 assert(hStore != NULL);
45 X509_STORE *store = X509_STORE_new();
46 PCCERT_CONTEXT pContext = NULL;
47 while ((pContext = CertEnumCertificatesInStore(hStore, pContext)) != NULL) {
48 X509 *x509 = d2i_X509(NULL,
49 const_cast<const unsigned char**
>(&pContext->pbCertEncoded),
50 pContext->cbCertEncoded);
52 X509_STORE_add_cert(store, x509);
57 CertFreeCertificateContext(pContext);
58 CertCloseStore(hStore, 0);
60 SSL_CTX_set_cert_store(ctx.native_handle(), store);
61#elif defined(__APPLE__) && !TARGET_OS_IPHONE
62 X509_STORE *store = X509_STORE_new();
63 CFArrayRef certs = NULL;
65 OSStatus os_status = SecTrustCopyAnchorCertificates(&certs);
69 ERR_NW <<
"Error enumerating certificates.";
77 for(CFIndex
i = 0;
i < CFArrayGetCount(certs);
i++) {
78 SecCertificateRef cert = (SecCertificateRef)CFArrayGetValueAtIndex(certs,
i);
81 CFDataRef der_cert = SecCertificateCopyData(cert);
83 ERR_NW <<
"Error getting a DER representation of a certificate.";
88 const uint8_t* der_cert_ptr = CFDataGetBytePtr(der_cert);
89 X509* x509_cert = d2i_X509(NULL, &der_cert_ptr, CFDataGetLength(der_cert));
91 ERR_NW <<
"Error deciding the X509 certificate.";
97 if(X509_STORE_add_cert(store, x509_cert) != 1) {
100 ERR_NW <<
"Error adding the X509 certificate to the store.";
106 SSL_CTX_set_cert_store(ctx.native_handle(), store);
107#elif (defined(__APPLE__) && TARGET_OS_IPHONE) || defined(__ANDROID__)
110 ctx.set_default_verify_paths();