13

証明書の失効に関してSecurity.Frameworkを使用して証明書を検証するときのiOSのポリシーを理解しようとしています。iOSのドキュメントでこれに関する情報を見つけることができません。私が現在取り組んでいるiPadプロジェクトのコンテキストでは、一部の証明書の失効ステータスの確認を要求する理由があります。Security.Frameworkを使用した証明書検証中にCRL/OCSPチェックを強制する方法について誰かアイデアがありますか?または、これを実現するためにOpenSSLに「フォールバック」する必要がありますか?

Mac OS X 10.6でも、CRL / OCSPチェックはオプションで実行され、キーチェーンアクセスを介して手動でオンにする必要があるようです。

Martijn

4

3 に答える 3

13

私はAppleの人たちによるこの質問に対する答えを持っています、私はここに完全な答えを投稿しました:

iOSでのSSL/TLS証明書失効メカニズムの詳細

要約すると、iOSでのOCSP実装について留意すべき点がいくつかあります。

  • 現在、OCSPポリシーは構成できません
  • EV証明書に対してのみ機能します
  • NSURLConnectionやUIWebViewなどの高レベルのものは、OCSPを使用するTLSセキュリティポリシーを使用します
  • SecTrustEvaluateはブロッキングネットワーク操作です
  • 「ベストアテンプト」として機能します。OCSPサーバーに接続できない場合でも、信頼性評価は失敗しません。
于 2012-03-02T21:36:46.860 に答える
1

私はこれをiOSのGCDAsyncSocketで実行しました。

特定のSecTrustRef信頼に対して。これを行う

SecPolicyRef policy = SecPolicyCreateRevocation(kSecRevocationOCSPMethod)
SecTrustSetPolicies(trust, policy);
SecTrustResultType trustResultType = kSecTrustResultInvalid;
OSStatus status = SecTrustEvaluate(trust, &trustResultType);
if (status == errSecSuccess && trustResultType == kSecTrustResultProceed)
{
   //good!
}
else
{
   //not good
}

//trustResultTypeを確認するために編集します

于 2015-04-20T23:42:10.837 に答える
1

SecTrustRefiOS10でオブジェクトのCRLチェックを有効にすることができました。

SecTrustRef trust = ...; // from TLS challenge
CFArrayRef oldPolicies;
SecTrustCopyPolicies(trust, &oldPolicies);
SecPolicyRef revocationPolicy = SecPolicyCreateRevocation(kSecRevocationCRLMethod);
NSArray *newPolicies = [(__bridge NSArray *)oldPolicies arrayByAddingObject(__bridge id)revocationPolicy];
CFRelease(oldPolicies);
SecTrustSetPolicies(trust, (__bridge CFArrayRef)newPolicies);
SecTrustSetNetworkFetchAllowed(trust, true);

// Check the trust object
SecTrustResult result = kSecTrustResultInvalid;
SecTrustEvaluate(trust, &result);
// cert revoked -> kSecTrustResultRecoverableTrustFailure

呼び出しSecTrustSetNetworkFetchAllowedが鍵でした。その呼び出しなしで、代わりにSecTrustEvaluate返さkSecTrustResultUnspecifiedれます。

于 2017-08-30T18:48:53.583 に答える