この質問は 2001 年に行われたものであることに注意してください。状況は変わりました。
Junos VPN にアクセスする必要がある iOS デバイスがあります。Junos 管理者からの不透明な指示によると、Apple IPCU を使用してデバイスにプロビジョニングされた証明書を取得する必要があります。証明書がデバイス上にあることはわかっており ([設定] で確認できます)、メール、Safari、Junos アプリから VPN にアクセスできます。
Apple のドキュメントには、各アプリには独自のキーチェーンがあると記載されていますが、これら 3 つのアプリはすべて証明書を参照できます。Jusos が IPCU によってプロビジョニングされた証明書にアクセスできるという事実は、すべてのアプリがこの証明書にアクセスできることを意味します。しかし、私がそれを見つけようとすると:
CFTypeRef certificateRef = NULL; // will hold a ref to the cert we're trying to retrieve
const char *certLabelString = "myCertificateName"; // c string of the certificate we're searching for.
CFStringRef certLabel = CFStringCreateWithCString( NULL, certLabelString, kCFStringEncodingUTF8); // the search we need - a string match for a UTF8 String.
const void *keys[] = { kSecClass, kSecAttrLabel, kSecReturnRef };
const void *values[] = { kSecClassCertificate, certLabel, kCFBooleanTrue };
CFDictionaryRef dict = CFDictionaryCreate(NULL, keys, values, 3, NULL, NULL); // set up a search to retrieve this certificate.
OSStatus status = SecItemCopyMatching(dict, &certificateRef); // Search the keychain, returning in dict
if(status != errSecSuccess)
NSLog(@"keychain find returned %ld", status);
if(dict)
CFRelease(dict);
失敗します。私の質問:
このコードは正しいですか?
SecItemCopyMatching実際、私はそれが返品 のためではないことを知ってい ますerrSecItemNotFound使用する値
certLabelString- 設定に表示される人間が読める名前を想定しています。
設定では、証明書は次のように表示されます (残念ながら難読化されています)。指定した検索テキストは、設定に表示されるテキストとまったく同じです。

Apple 開発者フォーラムへのクロス投稿