我是靠谱客的博主 眼睛大魔镜,最近开发中收集的这篇文章主要介绍https域名强弱校验的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){
public boolean verify(String hostname,SSLSession ssls) {
return true;
}
});

以上是域名若校验,如果当前https已经添加了本地证书实现了证书校验,那么域名可以作为一个弱校验也是没有问题的。

但是如果证书不想在app中保留,给https设置了信任所有证书,那么就需要设置域名的强校验来保证https访问目标的准确性,可以本地预埋域名,然后解析跟目标服务器连接缓存SSLSession中的peerhost和cn字段的域名,能够保证目标的准确性。  

 

  ssls是从服务器拿到的ssl证书相关(具体待验证)   

  hostname是访问的url的域名

  https默认验证不通过时,可以自己重写这个方法,如果返回true,表示强制信任此证书,就是通常的弱信任。如果需要自己做操作,可以从ssls里面拿到服务器返回的证书数据,同自己请求的域名、证书签证的域名、证书接收的url的域名做对比,匹配规则需要自己确认。这个域名也有可能是ip,具体看情况而定

 

以下是域名的强校验

 

request.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
// TODO Auto-generated method stub
try {
String peerHost = session.getPeerHost(); //服务器返回的主机名
String str_new = "";
X509Certificate[] peerCertificates = (X509Certificate[]) session
.getPeerCertificates();
for (X509Certificate certificate : peerCertificates) {
X500Principal subjectX500Principal = certificate
.getSubjectX500Principal();
String name = subjectX500Principal.getName();
String[] split = name.split(",");
for (String str : split) {
if (str.startsWith("CN")) {//证书绑定的域名或者ip
if (peerHost.equals(hostname)&&str.contains("客户端预埋的证书cn字段域名")) {
return true;
}
}
}
}
} catch (SSLPeerUnverifiedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return false;
}
});

  

转载于:https://www.cnblogs.com/fengchuxiaodai/p/5962760.html

最后

以上就是眼睛大魔镜为你收集整理的https域名强弱校验的区别的全部内容,希望文章能够帮你解决https域名强弱校验的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部