2
最近,我編寫了一小段代碼,用於從SCEP服務器獲取CA證書,將其轉換爲SecCertificateRef並將其添加到鑰匙串(System或login )。現在我想知道如何讓系統信任該證書。我一直在玩信託政策,但我還沒有太多運氣。爲導入到OS X的鑰匙串中的X509 CA證書添加信任
除此之外,我明白系統可能不允許您在沒有用戶交互的情況下自動信任證書。如果是這樣的話,你如何開始互動?使用「SecCertificateAddToKeychain」將證書悄悄地放入鑰匙串中。
附註:我試圖用這段代碼來支持10.5。
感謝您的幫助!
編輯: 在使用Citrix頁面上的代碼後,我想出了自己的功能。從我從Citix頁面收集的信息來看,這種方法具有破壞性。所以如果證書已經在鑰匙串中並且已經有了策略(iChat等),它將覆蓋這些。由於我不關心我的項目,所以我提出了一個更簡單的版本。
-(OSStatus) addCertificate: (CertificateWrapper *) cert trust:(BOOL) shouldTrust {
//keychain is a SecKeychainRef created with SecKeychainOpen
OSStatus result = SecCertificateAddToKeychain([cert certificate], keychain);
if((result == noErr || result == errKCDuplicateItem) && shouldTrust){
SecTrustSettingsDomain domains[3] = { kSecTrustSettingsDomainSystem, kSecTrustSettingsDomainAdmin, kSecTrustSettingsDomainUser};
for(int i = 0; i < 3; i++){
CFMutableArrayRef trustSettingMutArray = NULL;
trustSettingMutArray = CFArrayCreateMutable (NULL, 0, &kCFTypeArrayCallBacks);
result = SecTrustSettingsSetTrustSettings([cert certificate], domains[i], trustSettingMutArray);
if(result == noErr){
break;
}
}
}
return result;
}
他們的例子似乎並沒有開箱即用。也就是說,我能夠將其修剪到我需要的東西上,而且這似乎很有效。看我的編輯。 – Staros