web-dev-qa-db-ja.com

UIWebviewで未検証のSSL証明書を許可する

UIWebViewにWebサイトを埋め込みます。開発中にローカルホストを指定しました。問題は、「https://」のURLにヒットするたびにロードされないことです。モバイルサファリでURLをロードすると、次のポップアップが表示されます。

enter image description here

未検証のURLを許可するためにUIWebViewでこれをオーバーライドする方法はありますか?

25

Nickの答えは、アプリがApp StoreでAppleによって受け入れられないようにし、Georgeの答えは、.cssまたは.jsまたはその他のセカンダリダウンロードがあるページの残りの読み込みに失敗します。完全な答えです here UIWebViewが信頼できない証明書を持つサイトからページをロードできるようにします。

開発中にテストするだけの場合は、NSURLRequestにカテゴリを作成し、次のプライベートメソッドをオーバーライドできます。

#if DEBUG

@implementation NSURLRequest (NSURLRequestWithIgnoreSSL) 

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host
{
    return YES;
}

@end

#endif

これを.mファイルのいずれか(アプリデリゲートなど)のどこかに置くか、独自の.mファイルに入れます。一致するヘッダーファイルは必要ありません。

#if DEBUGは、Appleに提出するときに誤って有効にしておくことを防ぐための予防策ですが、リリースビルドで作業する必要がある場合は、それを削除してください。林檎)。

59
Nick Lockwood

Nick Lockwoodの回答用のSwift 3/4バージョン。

これはテスト/開発の目的のためだけです:

extension NSURLRequest {
    #if DEBUG
    static func allowsAnyHTTPSCertificate(forHost Host: String) -> Bool {
        return true
    }
    #endif
}
9

IOS 9では、すべての無効な証明書または自己署名証明書に対するSSL接続は失敗します。これは、iOS 9.0以降およびOS X 10.11以降の新しい App Transport Security 機能のデフォルトの動作です。

NSAllowsArbitraryLoads辞書でYESNSAppTransportSecurityに設定することにより、Info.plistでこの動作をオーバーライドできます。 ただし、テスト目的でのみこの設定をオーバーライドすることをお勧めします。

enter image description here

詳細については、App Transport Technote here を参照してください。

8
johnnieb

以下の2つの方法を使用して、UIWebviewで未検証のsslを許可できます

-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

私はこれを達成する方法を詳細に回答しました ここ

3
Durai Amuthan.H

これを合法的に行う方法があります(少なくともApp Storeの法律による)。 NSURLConnectionを使用する場合、自己署名SSL証明書の使用を許可するために使用できる2つの方法があります。

NSURLConnectionを使用して、信頼できない証明書のSSLで接続する方法

UIWebViewDelegateを実装する場合は、

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

これにNOを返して、WebViewが単独でロードされないようにします。次に、NSURLConnectionを構築します(上記のリンクを介して署名されていない証明書で使用できます)。

もちろん、通常のSSLの推奨事項がここに適用されます。
-本番サーバーでは署名されていない証明書を使用しないでください!
-常に警告を表示して、ユーザーが証明書を受け入れるかどうかを決定できるようにします。

2
George

私は少し遅いことを知っていますが、他の人を助けることができます、私はiOSアプリでSSLをバイパスする記事を見つけましたサーバーに有効な証明書を持っていないことを意味します。バイパスするには、1。)保護スペースに対して認証できます2.)要求でロードを開始する必要があります3.)認証チャレンジを受信しましたコピーできますこれからこれらの関数 [〜#〜] url [〜#〜] 、私にとってはかなりうまく機能します。それが役に立てば幸い

0
Emy Stats