web-dev-qa-db-ja.com

iOS 9のHTTPSリクエスト:NSURLSession / NSURLConnection HTTPロードが失敗しました(kCFStreamErrorDomainSSL、-9802)

Appleの新しい [〜#〜] ats [〜#〜] に対応するためにアプリを更新しています。 Plist-Infoを変更しないと、次のコードはVanilla `iOS 9シミュレーターのsendSynchronousRequest()でエラーをスローします。

NSURL *url  =[NSURL URLWithString:@"https://Google.com"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];
[request setHTTPMethod:@"GET"];
[request setURL:url];

NSURLResponse *urlResponse = nil;
NSError *error = nil;    
NSData *reponse = [NSURLConnection sendSynchronousRequest:request
                                        returningResponse:&urlResponse
                                                    error:&error];

エラー:

NSURLSession/NSURLConnection HTTPロードが失敗しました(kCFStreamErrorDomainSSL、-9802)

この問題の背後にある可能性についての考えはありますか?

PsNSURLConnectionが非推奨であることを理解しています。しかし、AllowArbitraryLoadsPlistを追加すると、この呼び出しは機能します。

15

NSURLSession/NSURLConnection HTTPロード失敗(kCFStreamErrorDomainSSL、-9802)は、「Forward Secrecy」をサポートしていないサーバーに対応しています。

これを回避するには、次のように.plistファイルにドメイン例外を追加します。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>test.testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>
14

Plistファイルに新しい行を追加します。

Add a new row in your plist file

9
pkc456

このコードをinfo.plistに追加して、http:

 <key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

この記事では、iOS 9とその実装のAppleによって行われたすべての変更をリストします。

http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/

6
delarcomarta

アプリにH5ページが含まれている場合、このエラーが発生することもあります。
オンにするだけでなくAllow Arbitrary Loadsこれを修正しますが、appDelegate.mに以下のコードを追加する必要もあります。


@implementation NSURLRequest(ATS)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host
{
    return YES;
}
@end
1
scorpiozj

Info.plistファイルに次を追加します。 「My_Base_Url.com」をWebサービスリンクのベースURLに置き換えます。これでうまくいくはずです。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>My_Base_Url.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
        </dict>
    </dict>
</dict>
1
Lazy

これによると: https://forums.developer.Apple.com/message/36842#36842

HTTPロードの失敗を修正する正しい例外(kCFStreamErrorDomainSSL、-9802)は次のとおりです。

NSExceptionAllowsInsecureHTTPLoads 
0
spirographer