From 121fb8b2fdc8fc8b73fc29493096129646b9eb61 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Mon, 28 Aug 2023 03:07:48 +0200 Subject: [PATCH] obs-outputs: Fix provision of CA certificates to mbedTLS on macOS --- plugins/obs-outputs/librtmp/rtmp.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/plugins/obs-outputs/librtmp/rtmp.c b/plugins/obs-outputs/librtmp/rtmp.c index e5dc1ac62..cfc7288a0 100644 --- a/plugins/obs-outputs/librtmp/rtmp.c +++ b/plugins/obs-outputs/librtmp/rtmp.c @@ -315,36 +315,29 @@ RTMP_TLS_LoadCerts(RTMP *r) { CertFreeCertificateContext(pCertContext); CertCloseStore(hCertStore, 0); #elif defined(__APPLE__) - CFTypeRef keys[6] = {kSecClass, kSecMatchLimit, kSecReturnAttributes, - kSecReturnData, kSecMatchTrustedOnly, kSecMatchValidOnDate}; - - CFTypeRef values[6] = {kSecClassCertificate, kSecMatchLimitAll, - kCFBooleanFalse, kCFBooleanTrue, kCFBooleanTrue, kCFNull}; - CFDictionaryRef query = - CFDictionaryCreate(kCFAllocatorDefault, keys, values, 6, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); - - CFTypeRef result; - - OSStatus code = SecItemCopyMatching(query, &result); + CFArrayRef anchors; + OSStatus code = SecTrustCopyAnchorCertificates(&anchors); if (code != noErr) { goto error; } - for (CFIndex i = 0; i < CFArrayGetCount(result); i++) { - CFDataRef data_ref = CFArrayGetValueAtIndex(result, i); + for (CFIndex i = 0; i < CFArrayGetCount(anchors); i++) { + SecCertificateRef cert = (SecCertificateRef)CFArrayGetValueAtIndex(anchors, i); - const UInt8 *data = CFDataGetBytePtr(data_ref); - size_t length = CFDataGetLength(data_ref); + CFDataRef der_data = SecCertificateCopyData(cert); + + const UInt8 *data = CFDataGetBytePtr(der_data); + size_t length = CFDataGetLength(der_data); if (data && length > 0) { mbedtls_x509_crt_parse_der(chain, data, length); } + + CFRelease(der_data); } - CFRelease(result); + CFRelease(anchors); #elif defined(__linux__) if (mbedtls_x509_crt_parse_path(chain, "/etc/ssl/certs/") < 0) {