[強制]在實現(xiàn)的HostnameVerifier子類中岔留,需要使用verify函數(shù)效驗服務器主機名的合法性,否則會導致惡意程序利用中間人攻擊繞過主機名效驗检柬。
說明:
在握手期間献联,如果URL的主機名和服務器的標識主機名不匹配,則驗證機制可以回調此接口實現(xiàn)程序來確定是否應該允許此連接何址,如果回調內實現(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);
}
}
}
在<阿里Android開發(fā)手冊>看到這一條原押,記錄一下。并查找一下關于HostnameVerifier的知識偎血。
一诸衔、概述
位于javax.net.ssl包下。聲明:public interface HostnameVerifier
此類是用于主機名驗證的基接口颇玷。
在握手期間笨农,如果 URL 的主機名和服務器的標識主機名不匹配,則驗證機制可以回調此接口的實現(xiàn)程序來確定是否應該允許此連接亚隙。
策略可以是基于證書的或依賴于其他驗證方案磁餐。
當驗證 URL 主機名使用的默認規(guī)則失敗時使用這些回調。
二、方法
public boolean verify(String hostname,SSLSession session)
參數(shù):
hostname-主機名
session - 到主機的連接上使用的 SSLSession
返回值:
如果主機名是可接受诊霹,則返回true;