21 #elif defined(__APPLE__)
22 #include <TargetConditionals.h>
23 #include <Security/Security.h>
24 #elif defined(__ANDROID__)
29 #define DBG_NW LOG_STREAM(debug, log_network)
30 #define LOG_NW LOG_STREAM(info, log_network)
31 #define WRN_NW LOG_STREAM(warn, log_network)
32 #define ERR_NW LOG_STREAM(err, log_network)
40 HCERTSTORE hStore = CertOpenSystemStore(0, TEXT(
"ROOT"));
41 assert(hStore != NULL);
43 X509_STORE *store = X509_STORE_new();
44 PCCERT_CONTEXT pContext = NULL;
45 while ((pContext = CertEnumCertificatesInStore(hStore, pContext)) != NULL) {
46 X509 *x509 = d2i_X509(NULL,
47 const_cast<const unsigned char**
>(&pContext->pbCertEncoded),
48 pContext->cbCertEncoded);
50 X509_STORE_add_cert(store, x509);
55 CertFreeCertificateContext(pContext);
56 CertCloseStore(hStore, 0);
58 SSL_CTX_set_cert_store(ctx.native_handle(), store);
59 #elif defined(__APPLE__) && !TARGET_OS_IPHONE
60 X509_STORE *store = X509_STORE_new();
61 CFArrayRef certs = NULL;
63 OSStatus os_status = SecTrustCopyAnchorCertificates(&certs);
67 ERR_NW <<
"Error enumerating certificates.";
75 for(CFIndex
i = 0;
i < CFArrayGetCount(certs);
i++) {
76 SecCertificateRef cert = (SecCertificateRef)CFArrayGetValueAtIndex(certs,
i);
79 CFDataRef der_cert = SecCertificateCopyData(cert);
81 ERR_NW <<
"Error getting a DER representation of a certificate.";
86 const uint8_t* der_cert_ptr = CFDataGetBytePtr(der_cert);
87 X509* x509_cert = d2i_X509(NULL, &der_cert_ptr, CFDataGetLength(der_cert));
89 ERR_NW <<
"Error deciding the X509 certificate.";
95 if(X509_STORE_add_cert(store, x509_cert) != 1) {
98 ERR_NW <<
"Error adding the X509 certificate to the store.";
104 SSL_CTX_set_cert_store(ctx.native_handle(), store);
105 #elif defined(__APPLE__) && TARGET_OS_IPHONE
106 ctx.set_default_verify_paths();
107 #elif 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")