21 #elif defined(__APPLE__)
22 #include <TargetConditionals.h>
23 #include <Security/Security.h>
26 #if defined(__ANDROID__) || (defined(__APPLE__) && TARGET_OS_IPHONE)
31 #define DBG_NW LOG_STREAM(debug, log_network)
32 #define LOG_NW LOG_STREAM(info, log_network)
33 #define WRN_NW LOG_STREAM(warn, log_network)
34 #define ERR_NW LOG_STREAM(err, log_network)
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();
Declarations for File-IO.
Standard logging facilities (interface).
void load_tls_root_certs(boost::asio::ssl::context &ctx)
static lg::log_domain log_network("network")