HostnameVerifier接口
HostnameVerifier的作用
HostnameVerifier接口用于验证 当前已建立的连接的hostname(参数一)和连接的SSLSession(参数二)的证书是否匹配。
其目的是防止中间人攻击。
HostnameVerifier的定义
HostnameVerifier接口定义如下:
public abstract interface HostnameVerifier
{
public abstract boolean verify(String paramString, SSLSession paramSSLSession);
}
仅一个方法,参数paramString为当前connection的hostname;参数paramSSLSession是当前connection的SSLSession,可以从中获取到证书列表。
verify方法的默认实现如下:
@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开发者自行实现。如果实现不恰当,例如永远返回true,则有安全风险。
反例:
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文章来源:https://www.toymoban.com/news/detail-614852.html
https://www.cnblogs.com/yufecheng/p/10968045.html
https://www.jianshu.com/p/ad4c7ce94518文章来源地址https://www.toymoban.com/news/detail-614852.html
到了这里,关于【Android安全】https安全:HostnameVerifier的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!