2011-06-28 82 views
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; 
} 

回答

0

還有就是如何與一噸的代碼示例爲此在Citrix web site一個很好的例子。

+0

他們的例子似乎並沒有開箱即用。也就是說,我能夠將其修剪到我需要的東西上,而且這似乎很有效。看我的編輯。 – Staros