2011-10-23 15 views
2

私は非常に単純なASIHTTPRequestをhttpsで送信しようとしています。私はvalidatesSecureCertificateフラグを設定しているが「NO」、私はまだ私の要求のための奇妙な応答を取得する:ASIHTTPRequest httpsリクエストとSSL

A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date) 

を私は使用していたコードは、私はセキュリティ上の理由から、実際のパラメータを削除しています、非常に簡単です:

NSURL *url = [NSURL URLWithString:@"https://secured.cet.ac.il/KotarServices/getMyBooks.aspx?username=xxxxxxxx&password=xxxxx&packageid=x"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setDidFailSelector:@selector(getMyBooksFailedWithError:)]; 
    [request setDidFinishSelector:@selector(getMyBooksFinishedWithResult:)]; 
    [request setDelegate:self]; 
    [request setValidatesSecureCertificate:NO]; 
    [request startAsynchronous]; 

深いコードを掘り下げてみると、オペレーティングシステムだけに関連するエラーコード "-9807"でエラーが発生することがわかりました。これは、私が使用しているサーバーとは関係ありません(SecureTransport.hこれを「無効な証明書チェーン」にマップします)。どのようにこの問題を克服するための任意のアイデア?前もって感謝します。

答えて

8

私はGoDaddy証明書に似た問題があり、if(![self validatesSecureCertificate])内の行の前後にコメント "Handle SSL certificate settings"の下にASIHTTPRequest.mで次の変更を加えなければならないことを覚えています。 1160:

[sslProperties setObject:(NSString *)kCFBooleanTrue forKey:(NSString *)kCFStreamSSLAllowsAnyRoot];

+0

ありがとう、私は明日この最初の事を試してみましょう&それが助けられた場合はお知らせください – Stavash

+0

残念ながら、これはトリックを行いません。それでも同じエラーコードが表示されます。とにかく努力してくれてありがとう – Stavash

+0

アップデート:[sslProperties setObject:(NSString *)kCFBooleanTrue forKey:(NSString *)kCFStreamSSLAllowsExpiredRoots]を設定してこれを解決しました。 – Stavash

1

私は今購入したGoDaddy証明書でこれを実行しました。 trydisの解決策の1つの修正:実際に証明書を検証する必要があるので、if(![self validatesSecureCertificate])の外側でこれを欲しいと思います。コメントにあるように、if節の中にあるものは「CFNetworkにSSL証明書を検証しないよう伝えます」。 TBH、GoDaddy証明書がクライアントによってルート証明書として解釈されている理由はわかりませんが、これが最初にこの変更を必要としています。

関連する問題