HTTPS概述

近些年,随着安全行业的发展,各公司及厂商对安全这一块业务都慢慢的重视起来。其中,https的普及就很好的说明了这一点。从一个渗透测试人员的角度来看,在我刚入行的前两年,搞过的所有的站里面,能够应用到https的站寥寥无几,但近几年https已经成为主流,而且不光是web,还有app,微信公众号等等,各个方面都已经引入了https来作为安全的第一道防线。为了科普同时也为了巩固自己的基础知识,所以今天来聊一下HTTPS。

HTTPS概述

HTTPS,顾名思义,本质上也是由HTTP+S来构成的,http全称超文本传输协议,是构成web世界的基石,S的是secure的简写,或者可以看做是SSL/TLS的简称,SSL(Secure Sockets Layer)安全套接层和TLS(Transport Layer Security)是为网络通信提供安全保障和数据完整性的安全协议,其在传输层为网络连接提供加密服务。

科普完概念,下面我们来看一下HTTPS具体是怎么工作的。

提到HTTPS,就要引入证书的概念,所谓证书,本质上只是一对公钥和私钥,浏览器保存公钥,服务器保存私钥。我们在访问https的网站的时候,正常情况下我们看到的是绿色https标记,这代表着证书链完整并可信。

但有时我们也会看到一些红色https标记,比如12306,但是红色https并不代表着你访问的网站不安全,而是意味着当前的证书链无法被浏览器和操作系统校验成功,可能存在风险。

证书校验过程

说到这,我们先来讲一下操作系统和浏览器是如何验证所谓的证书链是否有效和可信的。

我们的操作系统里面储存着很多根证书,所谓根证书即证书链最源头的证书,正常情况下,我们看到的绿https证书链的根证书都可以在操作系统内部找到。下面是macOS的根证书:

当根证书颁发机构得到证书申请者的信息后,根证书颁发机构首先通过SHA256计算出这些信息的摘要,然后用自己的私钥对摘要信息进行加密得到申请者的数字签名,然后给证书申请者颁发相应的数字证书。这样就完成了一次证书申请过程。

跟证书申请过程相似的是,证书链验证过程也是对摘要和数字签名的操作。

浏览器访问网站时,服务器首先返回完整的证书链。证书链中包含各级证书的公钥。如果浏览器想要验证网站的证书是否有效,首先会使用网站证书颁发机构的公钥解密它的数字签名得到摘要D1,然后再计算网站证书内容得到摘要D2,如果D1==D2,那么验证成功,否则失败。如此循环直到验证到根证书的部分。那么既然所有的次级证书都要通过上级证书进行验证,那么根证书如何验证呢?根证书是自签名的,也就是说用自己的私钥计算自己的摘要得到自己的数字签名,就是这么硬气。另外告诫大家,不要随随便便往自己电脑里添加根证书,很危险~~~

HTTPS加密过程

说完证书的校验过程,下面我们来说一下我们通过浏览器来跟服务器进行交互的过程中,HTTPS是如何保证数据的安全性的。

在这之前,大家需要了解的是,HTTP本身是明文传输的,HTTPS的作用是加密HTTP的明文然后再进行传输。

HTTPS工作流程如下:

客户端发送协议版本号,加密套件列表,随机数R1给服务器

服务器选择版本,确定要使用的加密套件,生成随机数R2并一同发送给客户端

服务器发送自身证书给客户端

客户端验证证书有效性

如果证书有效,生成随机数R3,使用证书公钥加密R3并发送给服务器

服务器用私钥解密得到R3,综合R1,R2,R3计算得到session-key,session-key用来作为通信过程中对数据进行加解密的秘钥,同样客户端也计算出同样的session-key作为秘钥

C——S双方使用秘钥session-key对数据进行加密传输

图来源:https://www.jianshu.com/p/31bcddf44b8d

以上过程中,对证书进行有效性校验时使用的是非对称加密算法,但是数据真正传输的时候,使用的却是对称加密算法,因为非对称加密算法速度慢,消耗资源高,在保证通信秘钥安全的前提下,使用对称加密算法来进行加解密无疑是更合理的。

中间人攻击

讲了这么多,那么是否引入HTTPS就能使网站万无一失了呢,答案当然是NO。https只是用来防止中间人攻击,防止数据被窃听,如果网站本身有漏洞,还是不能保证安全性。

burp如果想要拦截https的数据,就必须将burp的证书导入到操作系统。此时burp拦截数据包的过程中,首先浏览器和burp进行上述https加密流程的协商,burp和服务器进行https加密流程的协商,burp从而获得了用来加密的秘钥,自然可以拦截明文的http数据,在这一过程中,burp充当了中继服务器的角色,本质上也是一次中间人攻击。

那么有没有办法来防御类似burp的这种攻击方式呢?浏览器的话,服务器证书只能在交互开始前向服务器进行申请,无法验证通信过程中浏览器是用的到底是服务器的证书还是burp的证书,所以基本无法防御。但是app的话,可以事先将服务器的证书内置到app中,然后在浏览器服务器交互时,app首先获取服务器证书,然后跟内置证书作比对,从而防止了burp的中间人过程。

最后再随便聊聊吧

最近身边乱七八糟的事比较多,心里很乱,难得能静下来写点东西,如果能把今晚这种状态保持下去就好了

最后衷心祝愿大家,无论做什么,做成什么样,都能有一个健康的身体,以及,内心~

人到中年不得已,百威啤酒加枸杞

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180116G00F0800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券