1

iOS 9.1 で自己署名 HTTPS サーバーに接続しようとしています。

私は使用しています:

[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];

そして、証明書が無効であるというエラーが表示されます。

Error Domain=NSURLErrorDomain Code=-1202 "<French error saying the certificate is invalid" 
UserInfo=
   {NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x13c768140>, 
    NSLocalizedRecoverySuggestion=<French recovery suggestion asking if the user wants to connect anyway>, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9813, NSErrorPeerCertificateChainKey=<CFArray 0x13d82ffe0 [0x1a1242b68]>

考えられるすべてのトランスポート セキュリティ例外を追加しようとしましたが、現在の試みは次のとおりです。

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>mydomain.org</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>

私も試しましNSAllowsArbitraryLoadsたが、それでもうまくいきません。いくつかの .plist ファイル (ココアポッドとテスト) がありますが、正しいファイル (App/Supporting Files/Info.plist) にあると思います。

何が間違っている可能性がありますか?

4

3 に答える 3

1

このように最後にこれを追加する必要があります

<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

于 2015-10-28T09:35:24.380 に答える
0

したがって、これは NSURLConnection の問題であり、アプリのトランスポートではありません。

記録のために、また同じ問題に直面する可能性がある人のために、プライベート メソッドを呼び出して一時的に修正しました (これは行わないでください)。

+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;

これは Apple によって受け入れられません。実際の解決策はデリゲート メソッドを使用することです。これに取り組むときにこの回答を編集します (私のクライアントは「開発者」なので、彼のオプションを使用しました。彼は後で理解すると言いました。忙しい...)

于 2015-10-28T09:55:12.880 に答える
0

次の手順を使用して問題を解決しました

  1. プロジェクトの plist ファイルを開く
  2. キー「NSAppTransportSecurity」を追加し、タイプ ディクショナリに追加します
  3. Boolean YES として内部キー「NSallowArbitraryLoads」を追加します

ここに画像の説明を入力

于 2015-10-28T10:02:12.020 に答える