次のコードは、macOSのルート証明書を読み取ります。iOSでルートCA証明書をプログラムで読み取る
iOSの同等のコードは何ですか?
https://github.com/HaxeFoundation/hxcpp/blob/7bd5ff3/src/hx/libs/ssl/SSL.cpp#L455-L491
CFMutableDictionaryRef search;
CFArrayRef result;
SecKeychainRef keychain;
SecCertificateRef item;
CFDataRef dat;
sslcert *chain = NULL;
// Load keychain
if(SecKeychainOpen("/System/Library/Keychains/SystemRootCertificates.keychain",&keychain) != errSecSuccess)
return null();
// Search for certificates
search = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
CFDictionarySetValue(search, kSecClass, kSecClassCertificate);
CFDictionarySetValue(search, kSecMatchLimit, kSecMatchLimitAll);
CFDictionarySetValue(search, kSecReturnRef, kCFBooleanTrue);
CFDictionarySetValue(search, kSecMatchSearchList, CFArrayCreate(NULL, (const void **)&keychain, 1, NULL));
if(SecItemCopyMatching(search, (CFTypeRef *)&result) == errSecSuccess){
CFIndex n = CFArrayGetCount(result);
for(CFIndex i = 0; i < n; i++){
item = (SecCertificateRef)CFArrayGetValueAtIndex(result, i);
// Get certificate in DER format
dat = SecCertificateCopyData(item);
if(dat){
if(chain == NULL){
chain = new sslcert();
chain->create(NULL);
}
mbedtls_x509_crt_parse_der(chain->c, (unsigned char *)CFDataGetBytePtr(dat), CFDataGetLength(dat));
CFRelease(dat);
}
}
}
CFRelease(keychain);
if(chain != NULL)
return chain;
あなたが示したコードは 'cppで書かれているので、cppで使われているすべてのキーワードがAppleの' Security.framework'から来ているのでそのまま使用できます。同じものを使ってみましたか? 'SSL.cpp'?私はそれがあなたのために働くと思います。 – iphonic
'/ System/Library/Keychains/SystemRootCertificates.keychain'はiOS上に存在しません。少なくとも、すべてがサンドボックス化されているので、それを読むことはできません。 – KevinResoL