0

私の iPhone アプリケーションは、iPhone の CA トラスト ストアにアクセスして、TLS 接続用のサーバー証明書を検証したいと考えています。すべての既知の信頼できる CA 証明書が保存されているデバイス キー チェーン/トラスト ストアにアクセスできますか?

ありがとう、bms

=================================

お返事をありがとうございます。私のセットアップの詳細を説明しましょう。https 接続用に Tomcat サーバーにインストールした openssl を使用してサーバー証明書を作成しました。また、自分の CA を使用してこのサーバー証明書に署名し、この CA/ルート証明書を Safari (http url) を介して iPhone にインストールしました。さて、私のアプリでは、iPhone デバイスのプロファイルにインストールされている CA 証明書に対してサーバー証明書 (Tomcat によって提供される) を検証したいと思います。

この種のサーバー検証は iOS で (プログラムによって) 可能ですか?

サーバー証明書がパブリック CA によって署名されている場合、secTrustEvaluate は成功のリターン コードを返します。ただし、カスタム CA 署名付き証明書の場合、「kSecTrustResultRecoverableTrustFailure」が返されます。

ありがとう、bms

4

1 に答える 1

1

あなたの質問は十分に具体的ではありません。キーチェーンにアクセスして証明書を保存するための非常に便利な例があります。

https://github.com/kuapay/iOS-Certificate--Key--and-Trust-Sample-Project

次の関数を使用して証明書を(cer形式で)追加する必要があると思います:

SecCertificateRef certificate =  SecCertificateCreateWithData(NULL, (CFDataRef) certificateData);

成功した場合は、ネットワーク モジュールのルート証明書として設定できます...

評価したい場合:

        CFArrayRef rootCerts = (CFArrayRef)[client.additionalRootCertificates allObjects];
        SecTrustResultType result;
        OSStatus returnCode;

        if (rootCerts && CFArrayGetCount(rootCerts)) {
            // this could fail, but the trust evaluation will proceed (it's likely to fail, of course)
            SecTrustSetAnchorCertificates(trust, rootCerts);
        }

        returnCode = SecTrustEvaluate(trust, &result);

        if (returnCode == errSecSuccess) {
            proceed = (result == kSecTrustResultProceed || result == kSecTrustResultConfirm || result == kSecTrustResultUnspecified);
            if (result == kSecTrustResultRecoverableTrustFailure) {
                // TODO: should try to recover here
                // call SecTrustGetCssmResult() for more information about the failure
            }
        }

幸運を!

于 2013-11-05T10:34:19.493 に答える