前言:
越来越多的Android应用为了android通信安全,将http通信改为Https通信连接,或单向验证或双向验证。 但是如果不按规范将TLS连接中对证书等进行安全校验,实际上和http通信没有任何差别,还是有很多的安全风险,如中间人攻击等。
一方面TLS版本要高,如TLS1.2、TLS1.3,因为旧版本的都已发现安全漏洞。另外,就是一些通用部分,如下为阿里Android开发手册部分提到的规范,可以进行参考。
从 2017 年 3 月 1 日起,只要新应用或应用更新采用的 HostnameVerifier 的实施方式不安全,一律禁止在 Google Play 发布。您已发布的APK版本不会受到影响,但是,如果不解决此漏洞,您将无法为应用发布任何更新。
使用HostnameVerifier验证主机名
【强制】在实现的 HostnameVerifier 子类中,需要使用 verify 函数效验服务器主机名的合法性,否则会导致恶意程序利用中间人攻击绕过主机名效验。
说明:
在握手期间,如果 URL 的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口的实现程序来确定是否应该允许此连接。如果回调内实现不恰当,默认接受所有域名,则有安全风险。
反例:
HostnameVerifier hnv=new HosernameVerifier(){
@Override
public boolean verify(String hostname,SSLSession session){
return ture;
}