1、HTTPS相关概念
1.1、对称加密和非对称加密
简单描述一下,加密密钥和解密密钥相同,则称为对称加密;加密密钥和解密密钥不同,则称为非对称加密;
对称加密比非对称加密的效率要高。详细的描述的可以查看 对称加密与非对称加密详解 - 浪迹天涯的派大星 - 博客园 (cnblogs.com)
1.2、中间人攻击
顾名思义,就是通过在通讯两端中间,拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。
1.3、数字证书
用户将自己的信息和公钥提交给认证中心,由认证中心生成数字证书。
数字证书包含证书公开信息和签名,公开信息一般包含:证书的版本、序列号、签名算法、发行机构名称、有效期、所有人名称和公钥,以及签名,如下图:
签名计算步骤:公开信息先进行哈希得到hash值,在由证书颁发机构的私钥对hash值进行RSA加密,得到签名。
1.4、根证书、中间证书、用户证书
根证书:由可信任的CA认证中心颁发,它由自身进行认证,一般初始安装在操作系统和浏览器中,是整个证书链的起点
中间证书:由根证书的私钥计算签名,拥有根证书的签名的是中间证书,中间证书可以利用自己的私钥对用户证书进行颁发
用户证书:用户提交公开信息和自己的公钥,由中间证书私钥计算签名,来得到自己的证书
1.5、证书链
整个认证链从根证书开始,经过中间证书,最终达到用户证书,由于签名只能由证书颁发者的公钥进行验证,所以在根证书正确的前提下,保证了整个链条的安全性
2、SSL/TLS
SSL(Secure Socket Layer)是安全套接字层,TLS(Transport Layer Security)传输层安全是基于SSL3.0设计的协议,实际上相当于SSL的后续版本。
SSL/TLS是一个安全通信框架,属于传输层,上面可以承载HTTP协议和SMTP/POP3协议等。其属于传输层和应用层之间。
3、HTTPS通信流程
此时如果发生中间人攻击,客户端获取的证书其实是中间人的证书,拿到的公钥也是中间人的,发送的请求,中间人自然可以解密,中间人冒充客户端和服务端进行通信,所有的通信对于中间人来说就是透明的。
这里最大的问题就是如何确保客户端获取的公钥是要访问的网站的,所以引入了证书验证,由可信任的认证中心进行颁发,同时由于电脑上有认证中心的根证书,所以可以对网站的证书进行验证,判断是否合法。
4、TLS握手流程
握手流程分为四步:
1、客户端发起请求:
- ClientHello:客户端TLS版本、客户端随机数、密码套件列表。Wireshark抓包数据如下图:
2、服务端发起请求:
- ServerHello:服务端TLS版本、服务端随机数、确定的密码套件
- Certificate:证书(包含公钥)、Server Key Exchange:密钥交换、Server Hello:服务端Hello结束
3、客户端
5、数字证书颁发和验证流程
在保证根证书可信任的前提下,使用根证书的公钥解密中间证书的签名,得到解密的hash值,然后计算中间证书公开信息的hash值,比较 解密得到的hash值和计算出的hash值,如果相等,则中间证书可信;用户证书的验证同理。
如此便可以保证用户证书中的公钥是可信任的。