参考:https://wenku.baidu.com/view/eae5a7004835eefdc8d376eeaeaad1f346931108.html
参考:http://t.zoukankan.com/dlm17-p-12361093.html
1、HostnameVerifier处理
private static String[] VERIFY_HOST_NAME_ARRAY = new String[]{"**.***.com","**.**.com","***.***.com"};
OkHttpClient.Builder().hostnameVerifier(new HostnameVerifier() {//谷歌平台要求增加校验(域名合法)
@Override
public boolean verify(String hostname, SSLSession session) {
if(TextUtils.isEmpty(hostname)) {
return false;
}
return Arrays.asList(VERIFY_HOST_NAME_ARRAY).contains(hostname);
}
})
2、WebView的SSL证书问题
WebViewClient() {
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
onMyReceivedSslError(handler,error)
}
}
//处理SSL证书错误
fun onMyReceivedSslError(handler: SslErrorHandler?,error: SslError?){
val builder: AlertDialog.Builder = AlertDialog.Builder(mContext)
var message = "SSL Certificate error."
message = when (error?.primaryError) {
SslError.SSL_UNTRUSTED -> "The certificate authority is not trusted."
SslError.SSL_EXPIRED -> "The certificate has expired."
SslError.SSL_IDMISMATCH -> "The certificate Hostname mismatch."
SslError.SSL_NOTYETVALID -> "The certificate is not yet valid."
SslError.SSL_DATE_INVALID -> "The date of the certificate is invalid"
SslError.SSL_INVALID -> "A generic error occurred"
else -> "A generic error occurred"
}
message += " Do you want to continue anyway?"
builder.setTitle("SSL Certificate Error")
builder.setMessage(message)
builder.setPositiveButton("continue",
DialogInterface.OnClickListener { dialog, which -> handler?.proceed() })
builder.setNegativeButton("cancel",
DialogInterface.OnClickListener { dialog, which -> handler?.cancel() })
val dialog: AlertDialog = builder.create()
dialog.show()
}