私はクライアント証明書認証で戦っています。私は、ファイルから証明書をロードする資格を満たし、この方法を実行したいiPhone:HTTPSクライアント証明書
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
::サーバはクレデンシャル(この場合は証明書)を必要とする場合、このメソッドはNSURLConnectionからデリゲートを呼び出され
[[challenge sender] useCredential:[self credential] forAuthenticationChallenge:challenge];
しかし、私はSecIdentityRefパラメータを初期化する(または記入)する方法がわかりません。以下は、資格情報を作成する私のコードです:
NSString *certPath = [[NSBundle mainBundle] pathForResource:@"certificate" ofType:@"cer"];
NSData *certData = [[NSData alloc] initWithContentsOfFile:certPath];
SecIdentityRef myIdentity; // ???
SecCertificateRef myCert = SecCertificateCreateWithData(NULL, (CFDataRef)certData);
[certData release];
SecCertificateRef certArray[1] = { myCert };
CFArrayRef myCerts = CFArrayCreate(NULL, (void *)certArray, 1, NULL);
CFRelease(myCert);
NSURLCredential *credential = [NSURLCredential credentialWithIdentity:myIdentity
certificates:(NSArray *)myCerts
persistence:NSURLCredentialPersistencePermanent];
CFRelease(myCerts);
誰かがそれを解決する方法を知っていますか?ありがとう。
私は最終的に解決策を見つけましたが、新たな問題がここにある:
私のクライアントは、サーバーに証明書を送信しません。サーバが証明書を要求した後、アプリケーションは、この方法で実行:
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
および(私は上記のように)私が資格を満たすが、接続はエラーで終了:NSURLErrorDomain -1206。サーバーログによれば、クライアント証明書はアプリケーションによって送信されません。
誰でもこの動作の経験がありますか?アプリケーションの証明書を何とか検証する必要がありますか?それを動作させるために何か他に?私が助けてくれれば私の現在のコードを提供することができます。もちろん、任意のアイデアをお寄せいただきありがとうございます...
ご質問を読みやすくするためだけヒント:新しい答えとしてはいけないポストの質問。スレッドを読みにくくする傾向があります。あなたの質問は他の人にはおそらく有用であることを忘れないでください。あなたのプロセスと最終的な答えを見ることができることが重要です。ありがとう! – mtmurdock