web-dev-qa-db-ja.com

このサーバーの証明書は無効です

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

– connection:willSendRequestForAuthenticationChallenge:– connection:canAuthenticateAgainstProtectionSpace

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

sendAsynchronousRequest:queue:completionHandler:

そのため、コールバックを取得しません。私はApple docsを調べて次のように言っています

要求をダウンロードするために認証が必要な場合は、必要な資格情報を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 =

10
pa12

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

  • 不正な証明書を許可するには、CFNetworkingにドロップします
  • デリゲートと非ドキュメンテーションメソッドでNSConnectionを使用する
  • 見つけたプライベートAPIを使用する

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

Betterサーバーを修正します。それが最も簡単でクリーンです

4
Daij-Djan

使用しているWebサーバーがサーバー信頼認証を要求している場合、適切なアクションで適切に応答する必要があります。 connection:willSendRequestForAuthenticationChallenge:デリゲートメソッドを実装し、SecTrustRefを使用して認証する必要があります。

詳細はここにあります:- https://developer.Apple.com/library/ios/technotes/tn2232/_index.html

これはエラーを修正するための私のコードでした:

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSURLProtectionSpace *protectionSpace = [challenge protectionSpace];

    id<NSURLAuthenticationChallengeSender> sender = [challenge sender];

    if ([[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust])
    {
        SecTrustRef trust = [[challenge protectionSpace] serverTrust];

        NSURLCredential *credential = [[NSURLCredential alloc] initWithTrust:trust];

            [sender useCredential:credential forAuthenticationChallenge:challenge];
    }
    else
    {
        [sender performDefaultHandlingForAuthenticationChallenge:challenge];
    }
}

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

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

AFHTTPSessionManager * apiManager = [AFHTTPSessionManager initWithBaseURL:[NSURL URLWithString:baseURL];
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
policy.allowInvalidCertificates = YES;
apiManager.securityPolicy = policy;
4
skywinder

私の場合、ファイアウォールが必要なURLをブロックしたため、このエラーが発生しました。ファイアウォールの制限を削除した後、それはうまくいきました

1
arunjos007

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

1
prajothdsa

これは証明書エラーです。プログラム/ OSが証明書を無視するように設定を変更するか、信頼できるリストにURL /証明書を追加する必要があります。

すみません、認証です。証明書は認証です。調べてみると、この記事を見つけました。

それがあなたの問題を解決するかどうかはわかりませんが、基本的には、ドキュメントにどのように証明書を使用してサイトに接続するかについてはカバーしていないと述べています。

http://www.cocoanetics.com/2009/11/ignoring-certificate-errors-on-nsurlrequest/

0
am6sigma

以下のリンクをご確認ください。

https://discussions.Apple.com/thread/4912924?start=0&tstart=

0
Bera Bhavin