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域名强弱校验的区别的更多相关文章
- 通过http、https域名访问静态网页、nginx配置负载均衡(nginx配置)
很多场景下需要可以通过浏览器访问静态网页,不想把服务器ip地址直接暴露出来,通过nginx可以解决这个问题. 实现http域名访问静态网页 1.域名解析配置(本文都是以阿里云为例,其他平台,操作步骤类 ...
- HTTPS和HTTP有什么区别?如何将HTTP转化成HTTPS
不知道大家有没有注意到输入网址时的HTTP部分,在打开网站进行操作时有时候会自动跳转为HTTPS格式,这是为什么?HTTP与HTTPS到底有什么区别?如何将HTTP转化成HTTPS,针对这些问题,我们 ...
- 配置tomcat的https域名
配置tomcat的https域名: <Connector port=" protocol="org.apache.coyote.http11.Http11NioProtoco ...
- 【git】git中使用https和ssh协议的区别以及它们的用法
git可以使用四种主要的协议来传输资料: 本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 git 协议.其中,本地协议由于目前大都是进行远程开发和共享代码所以一般不常 ...
- nginx配置https域名
nginx安装配置支持https和配置https域名 yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-de ...
- 关于https域名下的页面iframe嵌套http页面的问题
业务场景:在一个https域名下用iframe嵌套一个http域名的页面,会直接报错的,报错信息如下: 这段话的意思是:http域名的页面是通过https域名页面加载的,在一个安全的页面不允许加载一个 ...
- Django+Vue+Nginx+Https域名代理访问
Django+Vue使用Nginx实现Https域名的安全访问 前端 VUE 前端访问自身域名: https://demo.com,后序使用 Nginx 代理至后端 直接访问后端https:api会无 ...
- 忽略https域名校验不通过
curl curl 报错: curl: (51) Unable to communicate securely with peer: requested domain name does not ma ...
- 问题:https与http有什么区别啊?
HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息.它使用安全套接字 ...
随机推荐
- darknet源码学习
darknet是一个较为轻型的完全基于C与CUDA的开源深度学习框架,其主要特点就是容易安装,没有任何依赖项(OpenCV都可以不用),移植性非常好,支持CPU与GPU两种计算方式.1.test源码( ...
- C++模板之函数模板实例化和具体化
模板声明 template<typename/class T>, typename比class最近后添加到C++标准. 常规模板,具体化模板,非模板函数的优先调用顺序. 非模板函数(普通 ...
- 洛谷P1522牛的旅行——floyd
题目:https://www.luogu.org/problemnew/show/P1522 懒于仔细分情况而直接像题解那样写floyd然后不明白最后一步max的含义了... 分开考虑怎么保证在一个内 ...
- 23.java方法的深入
深入: public class MethodTest05{ public static void main(String[] args){ int i=m1(ture); System.out.pr ...
- weex 打包apk
安装 weexpack weexpack create my-project //创建项目 cd my-project cnpm install //安装依赖 npm start //运行项目 ...
- error:: undefined reference to symbol '__glewBufferSubData' 未定义的引用 以及 error: main.o: undefined reference to symbol 'glTexImage2D'
在把DSO移植到QT工程中,出现了 /usr/bin/ld: KeyFrameDisplay.o: undefined reference to symbol '__glewBufferSubData ...
- UVa 1412 Fund Management (预处理+状压DP)
题意:题意很难说清楚自己看原文,链接:UVa 1412 Fund Management 析:总体来说如果没有超时的话,这个题不是特别难,但是这个题很容易超时,主要是体现在状态转移时,很容易想到状态方程 ...
- art-template在项目中的应用
art-template 是一个简约.超快的模板引擎.它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行性能,并且同时支持 NodeJS 和浏览器. 下面介绍在 ...
- 优化jQuery选择器
优化jQuery选择器 选择优化比以前更加重要,因为越来越多的浏览器实现了queryselectorall()并承担了将jQuery选择器转移到浏览器的责任.记住这些小技巧可以让你轻松突破学习选择器时 ...
- HDU2819【二分匹配与矩阵的秩】
题意: 给出一个矩阵问能否实现对角线全部是1,能的话输出路径,不能的话输出-1 思路: 首先根据矩阵的性质,这一定是一个满秩矩阵,所以只根据行或列交换就一定能实现. 所以行和列构成二分图,然后跑一发匈 ...