質問

私は、クライアントのためのアプリケーションのテストバージョンを構築しています。このアプリの一部は、SSLベースのサイトに出て呼び出すのWebViewを使用しています。次に、クライアントは、証明書の名前は、FQDNと一致しないテストドメインを提供してきました。残念ながら、彼らが提供する位置に一致していることを証明書ではありません。 :(

私は(ない生産使用のために、再び - ちょうどテスト目的のために)1行のコードでコンパニオンのiOSアドホックアプリ上でこの問題を回避働いています。私は、Android OS上で同様の情報で検索しましたが、私はここや他の場所で見てきたソリューションは、比較することによって、私の頭のスピンに大きな時間を作るのに十分です!

この問題を回避する簡単な方法はありますか?でもユーザー向けの設定はどこかに隠れて?

手がかり感謝!

役に立ちましたか?

解決

WebViewClientを作成し、このようになりますどのonReceivedSslErrorを処理します:

public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error)
Insideは、このコールバックあなただけhandler.proceed()を呼び出すことができますし、ページの読み込みを継続していきます。あなたはこのコールバックを処理し、proceed()メソッドを呼び出していない場合は、デフォルトの動作がない負荷にページのためになります。

他のヒント

SSLエラーハンドラのためのGoogleの新しいセキュリティポリシーの更新をに従って更新答えは、このAndroidの開発者<のhref = "https://developer.android.com/reference/android/webkit/WebViewClient.html#onReceivedSslError(androidを参照してください。 webkit.WebView、%20android.webkit.SslErrorHandler、%20android.net.http.SslError)」のrel = "nofollowを">ヘルプセンターの記事でます。

私たちの悪意のある動作のポリシーに違反するため、Googleのプレイ上のアプリケーションの防止除去のために

適切にSSL証明書の検証を処理するには、

、呼び出しSslErrorHandler.proceed()サーバによって提示された証明書は、あなたの期待を満たし、かつSslErrorHandler.cancelのinvoke()いつでもそう。

にコードを変更

たとえば、私が確認しているメイクのユーザーにアラートダイアログを追加すると警告グーグルもはやショーを思わます。

@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
 String message = "SSL Certificate error.";
    switch (error.getPrimaryError()) {
        case SslError.SSL_UNTRUSTED:
            message = "The certificate authority is not trusted.";
            break;
        case SslError.SSL_EXPIRED:
            message = "The certificate has expired.";
            break;
        case SslError.SSL_IDMISMATCH:
            message = "The certificate Hostname mismatch.";
            break;
        case SslError.SSL_NOTYETVALID:
            message = "The certificate is not yet valid.";
            break;
    }
    message += " Do you want to continue anyway?";

    builder.setTitle("SSL Certificate Error");
    builder.setMessage(message);

builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        handler.proceed();
    }
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        handler.cancel();
    }
});
final AlertDialog dialog = builder.create();
dialog.show();

}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top