14

次のnsurlconnectiondelegateを使用すると修正されることを知っています

– connection:willSendRequestForAuthenticationChallenge: – connection:canAuthenticateAgainstProtectionSpace

しかし、私は使用しようとしています

sendAsynchronousRequest:queue:completionHandler:

したがって、コールバックを取得できません。次のように書かれているAppleのドキュメントを調べました

要求をダウンロードするために認証が必要な場合は、必要な資格情報を URL の一部として指定する必要があります。認証が失敗した場合、または資格情報が見つからない場合、接続は資格情報なしで続行しようとします。

その方法がわかりませんでした。調べたらこのプライベートコールしかない

+(void)setallowsAnyHTTPSCertificate:(BOOL)inAllow forHost:(NSString *)inHost;

これを行う方法はありますか?

以下は私が得るエラーです

このサーバーの証明書は無効です。「example.com=0x8b34da0 {NSErrorFailingURLStringKey= https://example.com/test/ , NSLocalizedRecoverySuggestion=とにかくサーバーに接続しますか?, NSErrorFailingURLKey= https:/ /example.com/test/、NSLocalizedDescription=このサーバーの証明書は無効です。「example.com」になりすましたサーバーに接続している可能性があり、機密情報が危険にさらされる可能性があります。, NSUnderlyingError=0xa26c1c0 「このサーバーの証明書は無効です.あなたの機密情報を危険にさらす可能性のある「example.com」である.", NSURLErrorFailingURLPeerTrustErrorKey=

4

8 に答える 8

5

を使用している場合はAFNetworking、次のコードを使用できます。

(一時的なクライアント側のソリューションとして!)

AFHTTPSessionManager * apiManager = [AFHTTPSessionManager initWithBaseURL:[NSURL URLWithString:baseURL];
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
policy.allowInvalidCertificates = YES;
apiManager.securityPolicy = policy;
于 2014-04-23T15:41:23.713 に答える
5

これを試して。

以下に示すように、カスタム セッション構成を使用してセッションを開始します。

let session = URLSession(configuration: URLSessionConfiguration.ephemeral,
                                 delegate: self,
                                 delegateQueue: nil)

次のデリゲート コールバック メソッドを実装します。

public func urlSession(_: URLSession, task _: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
    guard let serverTrust = challenge.protectionSpace.serverTrust else {
        return completionHandler(URLSession.AuthChallengeDisposition.useCredential, nil)
    }
    return completionHandler(URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: serverTrust))
}
于 2020-04-29T06:08:05.760 に答える
4

あなたがしようとしている方法でそれを修正することはできません

  • CFNetworking にドロップして、不正な証明書を許可する
  • NSConnection をデリゲートと undoc 化されたメソッドで使用する
  • 見つけたプライベート API を使用する

すべて良くない。CFNetwork は今のところ Apple で問題ないはずですが、他の 2 つの方法は appstore で安全でさえありません。

サーバーを直したほうがいいです。それが最も簡単でクリーン

于 2014-01-18T23:14:00.233 に答える
1

この問題は、ブロックで試している方法では修正できません。証明書の検証をバイパスするには、デリゲートを設定し、認証チャレンジ デリゲートを実装する必要があります。最善の解決策は、適切な証明書を作成する (自己署名されていないことを確認する) か、問題がなければプロトコルを HTTP に変更することです。

于 2016-01-07T09:31:48.183 に答える