2011-06-28 9 views
2

最近、私はSCEPサーバからCA証明書を取得し、SecCertificateRefに変換してキーチェーンに追加しました)。今私はどのようにシステムがその証明書を信頼できるようにすることができますかと思います。私はトラストポリシーで遊んできましたが、まだ運があまりありませんでした。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

関連する問題