了解https

 
0x01 基本概念

HTTP :是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。

HTTPS :是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性,可以理解为HTTP+SSL/TLS。

SSL、TLS:SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。目前使用最广泛的是TLS 1.1、TLS 1.2。

对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

非对称加密:非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

哈希:Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。

数字签名:数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是使用了非对称加密领域的技术来实现的,用于鉴别数字信息的方法。

0x02 抓包情况
HTTP由于是未加密的,所以可以通过网卡抓包等方法获取明文数据:
了解https
 
HTTPS是加密的通讯方式,抓包发现是加密后的数据,无法获得明文(当然也可以通过配置私钥、SSLKEYLOGFILE等方式抓包,不在本次考虑范围内):
了解https
 
0x03 过程分析
网站使用https的话,目前大多可以从网站管理处直接配置,自己配的话步骤就是先生成服务器的公钥和私钥,然后使用服务器公钥去CA申请数字证书,拿到证书以后,给网站配置好私钥和证书就可以使用https了。
而数据交互的简单过程如下:
了解https
 
 
大概过程:当我们浏览器输入一个HTTPS地址后,浏览器请求服务端,服务端会返回服务端的证书,客户端验证无问题后,会生成一个随机数,使用服务端公钥加密,发到服务端,服务端用自己的私钥解密,获得客户端生成的随机数,后面客户端与服务端使用该随机数对称加密进行通讯。
wireshark抓包如下:
了解https
这个过程中有几点问题需要搞清楚:
1、在这个过程中有几对公钥和私钥
2、服务端的数字证书是什么
3、客户端怎么验证服务端发送回来的证书是真的
4、如何保证随机数只有客户端与服务端知道
下面一一来解答下(前提是信任CA机构):
1、两对,一对是服务器的,一对是CA机构的。服务端向CA机构申请证书,服务端有服务器的私钥,数字证书(里面有服务器公钥、CA签名等信息),CA机构那里有他自己的私钥,负责给申请的证书签名,客户端内置了CA机构的公钥,请求服务端后,也会保存服务器端的公钥。
2、服务端的数字证书是服务器通过自己的公钥向CA机构申请的一个证书。证书有两部分,第一部分是证书编号、网站名、服务器公钥、有效期、机构名等明文信息,另一部分是第一部分明文哈希后的字符串被CA机构用自己的私钥加密的密文,通常叫做签名。
3、因为数字证书签名是CA私钥加密的,只有CA公钥可以解密(CA公钥已经内置在浏览器中了),如果收到证书第一部分被攻击者篡改了,那么客户端用CA公钥解密后与第一部分明文哈希是不匹配的,而数字签名只能是CA私钥才能加密,攻击者无私钥,所以签名部分也无法伪造。当客户端用CA公钥解密后与第一部分明文哈希是匹配的,那么就证明证书就是我们要访问的服务端发过来的。
4、根据3客户端可以得到服务端的公钥,用该公钥加密随机数,只有服务器端的私钥才能解密,所以只有客户端与服务器端知道。
 
通过上面的知识,可以将过程描述稍微复杂些:
服务端向CA机构申请证书放到服务器上,客户端请求后,服务端返回服务端证书,客户端通过内置CA公钥验证无问题后,生成一段随机数,使用服务端公钥加密后,发到服务端,服务端用自己的私钥解密,获取随机数,通过对称加密数据给客户端反馈,客户端与服务端后续就使用该随机数对称加密进行通讯。
0x04 一些思考
HTTPS如何破解?
1.被攻击者安全意识较差,忽略验证证书有效性
2.获得服务器私钥
3.获得客户端浏览器权限(获取随机数)
4.黑掉CA
5.。。。
Burpsuite为什么能抓HTTPS包?
Burp抓https包的时候会先将Burp的证书加到浏览器的信任证书中,类似于只黑掉了自己本机的CA,Burp做中间人,既做服务端也做客户端。

了解https

上一篇:css多行溢出省略号


下一篇:黑马程序员---一DAY16总结--java中你必须掌握的集合框架技术