https工作原理

浏览器验证
web端分两种情况,一是在地址栏输入https地址,这种情况浏览器会帮忙做证书的验证;另一种情况是通过ajax库请求https接口,这种情况ajax会负责证书的验证(个人理解,不对请纠正)。
无论哪种方式,请求发出后,服务端会返回自己的证书,客户端会从6个方面验证证书的有效性和合法性:
- 检查SSL 证书是否是由浏览器中“受信任的根证书颁发机构”颁发
- 检查SSL证书中的证书吊销列表,检查证书是否被证书颁发机构吊销
- 检查此SSL证书是否过期
- 检查部署此SSL证书的网站的域名是否与证书中的域名一致
- IE7浏览器会到欺诈网站数据库查询此网站是否已经被列入欺诈网站黑名单
浏览器需经过以上5个方面的检查后,才会在页面显示安全锁标志,正常显示部署了SSL证书的加密页面。
ios验证
由系统和网络请求库帮忙做默认验证,也可以自定义验证逻辑。
ios验证时有一点需要注意:当证书是自签名证书时,系统不存在该证书的根证书,系统无法验证证书链是否受信任,这时需要app自行验证,大概分如下两步:
- 将服务器的公钥证书拖到Xcode中
- 修改验证模式
原理:
简单来说,就是你本可以修改AFN这个设置来允许客户端接收服务器的任何证书,但是这么做有个问题,就是你无法验证证书是否是你的服务器后端的证书,给中间人攻击,即通过重定向路由来分析伪造你的服务器端打开了大门。
解决方法:
AFNetworking是允许内嵌证书的,通过内嵌证书,AFNetworking就通过比对服务器端证书、内嵌的证书、站点域名是否一致来验证连接的服务器是否正确。由于CA证书验证是通过站点域名进行验证的,如果你的服务器后端有绑定的域名,这是最方便的。将你的服务器端证书,如果是pem格式的,用下面的命令转成cer格式。
ios验证参考iOS 中对 HTTPS 证书链的验证
参考
图解HTTPS
浏览器如何验证HTTPS证书的合法性?
iOS 中对 HTTPS 证书链的验证
SSL证书验证过程:浏览器如何验证SSL证书?
【iOS开发】Https 原理与验证过程
网友评论