使用OkHttpまたはHttpURLConnectionの検証証明書とドメイン名を実現するにはされていhttps://mp.csdn.net/mdeditor/85266096は、WebViewの読み込みHTMLで使用し、いくつかのアプリケーション、HTMLでHTTPSサービスを使用してAJAXリクエストを説明し、どのようにセキュリティ証明書をチェックするには?
この記事では、WebViewのは、パリティHTTPS自家製証明書を達成説明しています。
私たちは、AndroidのWebViewの時間を設定します使用しWebViewClient
て、リクエストのHTTPS時にエラーが発生した場合、それが呼び出す以下のように、この方法を:WebViewClient
onReceivedSslError
WebView webView = new WebView(getContext());
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
}
});
super.onReceivedSslError(view, handler, error);
デフォルトでは、親クラスの実装を継承する親クラスが実装されたhandler.cancel();
通信をキャンセルしました。だから我々はしなければならないでonReceivedSslError
、証明書の検証方法を実行します。
onReceivedSslError
パラメトリック解析法
WebView view
パラメーター
何も言うことはありません、現在のWebViewオブジェクトです。SslErrorHandler handler
パラメータは
、それがクラスコンストラクタと二つの方法であり、ソースコードを見ることができるに指します。proceed()
この方法は、すべてのネットワークアクセスできるようにすることですcancel()
方法を、すべてのネットワークアクセスを削除することです。
public class SslErrorHandler extends Handler {
/**
* @hide Only for use by WebViewProvider implementations.
*/
@SystemApi
public SslErrorHandler() {}
/**
* Proceed with the SSL certificate.
*/
public void proceed() {}
/**
* Cancel this request and all pending requests for the WebView that had
* the error.
*/
public void cancel() {}
}
SslError error
パラメータは
にポイントSslError
このクラスのプロパティとメソッドを参照することができ、ソースコード
の主な属性は以下のとおりです
SSL_NOTYETVALID
:証明書が無効である
SSL_EXPIRED
:証明書の有効性を越えて
SSL_IDMISMATCH
:ドメイン名が一致しない
SSL_UNTRUSTED
:信頼できない証明書
SSL_DATE_INVALID
:証明書の日付が無効である
SSL_INVALID
:一般的なエラー
いくつかのコンストラクタに加えて、主に方法は以下のとおりです
getUrl()
:現在のリクエストURLを取得
getPrimaryError()
:エラーの種類を取得する
getCertificate()
:現在の証明書を取得します
証明書のSHA256チェックサム値
ロジック分析:
現在のWebView SHA256証明書の値を取得し、1
クライアント証明書SHA256値取得、2
3、比較の値は、それらが等しい場合、呼び出し、2つの証明書をSHA256 handler.proceed()
、方法、等しくない場合、コールは促さそしてアプリケーションを終了します。
WebView webView = new WebView(getContext());
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
String certSha256 = SSLSocketCert.getSSLCertSHA256FromCert(view.getContext().getAssets().open("client.crt"));
String serverSha256 = SSLSocketCert.getSSLCertFromServer(error.getCertificate());
if (certSha256.equalsIgnoreCase(serverSha256)) {
handler.proceed();
} else {
DialogUtil.showSingleDialog(view.getContext(), "警告", "证书校验失败", false, "退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.exit(0);
}
});
}
}
});
用途上記のコードSSLSocketCert
やDialogUtil
ツールを、DialogUtil
あなた自身を使用することができ、SSLSocketCert
にアップロード
https://download.csdn.net/download/u010982507/10907473