Cordova 3.2とjquery mobile 1.3を使用してiOSアプリを作成しました。 jquery ajaxを使用してリクエストをRESTfullサービスに送信し、情報を取得/更新します。
さまざまなiOSバージョンを備えたさまざまなiPhone、さまざまなテストデバイスがあります。 iOS 7を実行しているiPhone 4Sで、ajaxリクエストが送信されると、次のエラーが表示されます。
NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
これは、このデバイス、iOS 7を実行する別のiPhone 4Sでのみ発生します。これは、私が使用している他のすべてのテストデバイスと同様に、まったく問題なく動作します。
私はこれが何らかの形で証明書が無効であることを示していることを読んだことがあります、その場合、これは無視でき、なぜ1つのデバイスに影響しますか?
誰かがこれがなぜ起こっているのか、私のデバイスの1つでしか動作しないようにするデバイスについて何が違うのかを提案できますか?ありがとう
一部のデバイスで機能し、他のデバイスでは機能しない場合、それらのデバイスの証明書検証パラメーターにいくつかの違いがあります。確認するべきいくつかの事柄はここにあります:
不幸なデバイスのブラウザーでエンドポイントURLにアクセスすると、どのようなエラーが発生しますか? (注:正しいヘッダーとパラメーターを要求していないため、サーバーからエラーが発生することは明らかです。しかし、Safari自体について話しているのです。証明書に誤りがあります。)
*私が覚えていないことを修正するために編集しました:あなたはnotあなたがSafariのURLに行くとリーフ証明書を受け入れるオプションがあります中間証明書を直接ロードしようとした場合に中間証明書を受け入れるオプション。
私も同様の問題を抱えていましたが、私の場合、これはすべてのデバイスで発生し、httpsを使用したajax呼び出し中にのみ発生していました。
その場合、appDelegate.mファイルの最後に以下のコードを追加すると、問題が軽減されます。
@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host
{
return YES;
}
@end
しかし、他のデバイスで動作している場合、私が提供したソリューションは効果的ではない可能性があることを疑います。しかし、試してみてください。
Swift Markivs answer)のバージョン ( here から取得):
extension NSURLRequest {
static func allowsAnyHTTPSCertificateForHost(Host: String) -> Bool {
return true
}
}
Xcode 7.3 Swift 2.2
これを機能させるには、3つのことをしなければなりませんでした。
シミュレータでアプリケーションを実行しているときに同じ問題が発生しました。この背後にある理由は、シミュレータに信頼できる証明書がないことです。
実行中のシミュレータウィンドウに.cerファイルをドラッグアンドドロップするだけです。 Safariが点滅し、証明書(または認証局)のインポートダイアログが表示されます...