HostnameVerifier接口
HostnameVerifier的作用
HostnameVerifier接口用于驗(yàn)證 當(dāng)前已建立的連接的hostname(參數(shù)一)和連接的SSLSession(參數(shù)二)的證書是否匹配。
其目的是防止中間人攻擊。
HostnameVerifier的定義
HostnameVerifier接口定義如下:
public abstract interface HostnameVerifier
{
public abstract boolean verify(String paramString, SSLSession paramSSLSession);
}
僅一個(gè)方法,參數(shù)paramString為當(dāng)前connection的hostname;參數(shù)paramSSLSession是當(dāng)前connection的SSLSession,可以從中獲取到證書列表。
verify方法的默認(rèn)實(shí)現(xiàn)如下:
@Override
public boolean verify(final String host, final SSLSession session) {
try {
final Certificate[] certs = session.getPeerCertificates();
final X509Certificate x509 = (X509Certificate) certs[0];
verify(host, x509);
return true;
} catch (final SSLException ex) {
if (log.isDebugEnabled()) {
log.debug(ex.getMessage(), ex);
}
return false;
}
}
verify方法可以由app開發(fā)者自行實(shí)現(xiàn)。如果實(shí)現(xiàn)不恰當(dāng),例如永遠(yuǎn)返回true,則有安全風(fēng)險(xiǎn)。
反例:
HostnameVerifier hnv=new HosernameVerifier(){
@Override
public boolean verify(String hostname,SSLSession session){
return ture;
}
}
正例:
HostnameVerifier hnv=new HosernameVerifier(){
@Override
public boolean verify(String hostname,SSLSession session){
if("youhostname".equals(hostname)){
return true;
}else{
HostnameVerifier hv=HttpsURLConnection.getDefaultHostnameVerifier();
return hv.verify(hostname,session);
}
}
}
參考:
如何解決 HostnameVerifier 不安全的問題?
https://blog.csdn.net/u010358168/article/details/83548639
Java的HostnameVerifier
https://www.jianshu.com/p/ad4c7ce94518文章來源:http://www.zghlxwxcb.cn/news/detail-614852.html
https://www.cnblogs.com/yufecheng/p/10968045.html
https://www.jianshu.com/p/ad4c7ce94518文章來源地址http://www.zghlxwxcb.cn/news/detail-614852.html
到了這里,關(guān)于【Android安全】https安全:HostnameVerifier的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!