簡體   English   中英

為在 OS X 上導入鑰匙串的 X509 CA 證書添加信任

[英]Adding trust for a X509 CA certificate imported into keychain on OS X

最近,我編寫了一小段代碼,從 SCEP 服務器獲取 CA 證書,將其轉換為 SecCertificateRef 並將其添加到鑰匙串(系統或登錄)。 現在我想知道如何讓系統信任該證書。 我一直在玩Trust Policies,但還沒有運氣。

最重要的是,我了解系統可能不允許您在沒有用戶交互的情況下自動信任證書。 如果是這樣,你如何開始互動? 使用“SecCertificateAddToKeychain”將證書靜默放入鑰匙串中。

旁注:我也在嘗試使用此代碼支持 10.5。

謝謝你的幫助!

編輯:在玩過 Citrix 頁面上的代碼后,我想出了自己的 function。 根據我從花旗頁面收集的信息,這種方法具有破壞性。 因此,如果證書已經在鑰匙串中並且已經有策略(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;
}

Citrix web 站點上有一個很好的示例,其中包含大量示例代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM