9

私のアプリは、を使用してSchwab OFX サーバーNSURLConnectionに接続します。残念ながら、サーバーは、Mac デスクトップでは信頼されているが iPhone ではまだ信頼されていない、ごく最近の中間証明書を使用しています。(URL を試してみてください。iPhone では証明書エラーが表示されます。)

NSURLConnection私が知っている無効な証明書を無視するように指示する簡単な方法はありません。したがって、証明書をキーチェーンに手動でインポートして信頼レベルを設定しようとしていますが、ブロックにぶつかりました。

SecCertificateCreateWithDataファイルから証明書をインポートするために正常に呼び出し.cerます。デスクトップでは を呼び出しますSecTrustSettingsSetTrustSettingsが、iPhone SDK には存在しません。

回避策はありますか?

4

4 に答える 4

12

Apple のテクニカル サポートは、完璧な回答で迅速に対応してくれました。

まず、Schwab が「Mac デスクトップでは信頼されているが、iPhone ではまだ信頼されていないごく最近の中間証明書」を使用しているというのは誤りです。中間証明書は、組み込みのルート証明書ストアにはありません。問題は、ほとんどの SSL サーバーが検証に必要なすべての中間証明書をバンドルすることですが、Schwab は URL から中間証明書を取得することを期待する代替 SSL プロセスを使用します。Mac デスクトップは中間証明書のフェッチをサポートしていますが、現在の iPhone OS はサポートしていません。

実際のコードの要点は次のとおりです。

OSStatus            err;
NSString *          path;
NSData *            data;
SecCertificateRef   cert;

path = [[NSBundle mainBundle] pathForResource:@"OFX-G3" ofType:@"cer"];
assert(path != nil);

data = [NSData dataWithContentsOfFile:path];
assert(data != nil);

cert = SecCertificateCreateWithData(NULL, (CFDataRef) data);
assert(cert != NULL);

err = SecItemAdd(
    (CFDictionaryRef) [NSDictionary dictionaryWithObjectsAndKeys:
        (id) kSecClassCertificate,  kSecClass, 
        cert,                       kSecValueRef, 
        nil
    ], 
    NULL
);
assert(err == noErr);

CFRelease(cert);

これは、OFX-G3.cer が中間 SSL 証明書であり、Resources フォルダーにあることを前提としています。

于 2009-11-18T23:25:56.590 に答える
2

CFStreamCoreFoundation のオブジェクトを使用して、ssl 設定をバイパスできます。OFX サーバーの適切なポートに接続するストリームを作成し、 (キャストできる)に、、 などのキーCF(Read|Write)StreamSetPropertyを提供するために使用する必要があります。CFDictionaryNSDictionarykCFStreamSSLLevelkCFStreamSSLAllowsAnyRootkCFStreamSSLValidatesCertificateChain

于 2009-11-17T04:22:40.703 に答える
1

証明書をシミュレーターの TrustStore.sqlite3 ファイルに直接インストールできます。Charles Proxy はこれを使用して、ルート証明書をシミュレーターにインストールします。http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

于 2012-02-24T20:17:40.543 に答える
0

これをプログラムで実行しようとしていますか、それとも通常の UI で実行しても問題ありませんか?

Apple の iPhone 構成ユーティリティを使用すると、電話に証明書を追加できます。また、電話で電子メールを読むことができるユーザーに証明書を電子メールで送信し、電話で証明書を開くと、証明書をインストールするかどうかを尋ねられます。

申し訳ありませんが、今は詳細な手順をお伝えすることはできませんが、私は iPhone から離れています。成功したかどうかを確認するために、iPhone にアクセスできるようになったら、後でもう一度確認します。

于 2009-11-17T04:14:25.057 に答える