21 #elif defined(__APPLE__)
22 #include <Security/Security.h>
26 #define DBG_NW LOG_STREAM(debug, log_network)
27 #define LOG_NW LOG_STREAM(info, log_network)
28 #define WRN_NW LOG_STREAM(warn, log_network)
29 #define ERR_NW LOG_STREAM(err, log_network)
37 HCERTSTORE hStore = CertOpenSystemStore(0, TEXT(
"ROOT"));
38 assert(hStore != NULL);
40 X509_STORE *store = X509_STORE_new();
41 PCCERT_CONTEXT pContext = NULL;
42 while ((pContext = CertEnumCertificatesInStore(hStore, pContext)) != NULL) {
43 X509 *x509 = d2i_X509(NULL,
44 const_cast<const unsigned char**
>(&pContext->pbCertEncoded),
45 pContext->cbCertEncoded);
47 X509_STORE_add_cert(store, x509);
52 CertFreeCertificateContext(pContext);
53 CertCloseStore(hStore, 0);
55 SSL_CTX_set_cert_store(ctx.native_handle(), store);
56 #elif defined(__APPLE__)
57 X509_STORE *store = X509_STORE_new();
58 CFArrayRef certs = NULL;
60 OSStatus os_status = SecTrustCopyAnchorCertificates(&certs);
64 ERR_NW <<
"Error enumerating certificates.";
72 for(CFIndex
i = 0;
i < CFArrayGetCount(certs);
i++) {
73 SecCertificateRef cert = (SecCertificateRef)CFArrayGetValueAtIndex(certs,
i);
76 CFDataRef der_cert = SecCertificateCopyData(cert);
78 ERR_NW <<
"Error getting a DER representation of a certificate.";
83 const uint8_t* der_cert_ptr = CFDataGetBytePtr(der_cert);
84 X509* x509_cert = d2i_X509(NULL, &der_cert_ptr, CFDataGetLength(der_cert));
86 ERR_NW <<
"Error deciding the X509 certificate.";
92 if(X509_STORE_add_cert(store, x509_cert) != 1) {
95 ERR_NW <<
"Error adding the X509 certificate to the store.";
101 SSL_CTX_set_cert_store(ctx.native_handle(), store);
103 ctx.set_default_verify_paths();
Standard logging facilities (interface).
void load_tls_root_certs(boost::asio::ssl::context &ctx)
static lg::log_domain log_network("network")