终于搞明白了https的底层请求流程
Posted java叶新东老师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终于搞明白了https的底层请求流程相关的知识,希望对你有一定的参考价值。
http和https区别
网络请求方式通常分为两种,分别是HTTP请求和HTTPS请求,其中HTTP的传输属于明文传输,在传输的过程中容易被人截取并且偷窥其中的内容,而HTTPS是一种在HTTP的基础上加了SSL/TLS层(安全套接层)的安全的超文本传输协议,其传输的内容是通过加密得到的,所以说是一种安全的传输;
HTTP 的缺点
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
SSL/TSL
为了解决 HTTP 协议的以上缺点,在上世纪90年代中期,由网景(NetScape)公司设计了 SSL 协议。SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”)。
到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。
互联网加密协议历史:
- 1994年,NetScape 公司设计了 SSL 协议的1.0版,但是未发布。
- 1995年,NetScape 公司发布 SSL 2.0版,很快发现有严重漏洞。
- 1996年,SSL 3.0 版问世,得到大规模应用。
- 1999年,互联网标准化组织 ISOC 接替 NetScape 公司,发布了 SSL 的升级版 TLS 1.0 版。
- 2006年和2008年,TLS 进行了两次升级,分别为 TLS 1.1 版和 TLS 1.2 版。最新的变动是2011年 TLS 1.2 的修订版。
目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。
TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。
所谓的 HTTPS 其实是“HTTP over SSL”或“HTTP over TLS”,它是 HTTP 与 SSL/TLS 的结合使用而已。
加密算法的分类
https是对称和非对称两种加密算法组合起来一起使用的,
- 对称加密:发送方和接收方共用一把密钥,不太安全
- 非堆成加密:发送方持私钥,接收放持公钥,私钥加密的数据只能由公钥进行解密,相反的,公钥加密的数据也只能由私钥解;
对称加密算法
常用的有:RC4、DES、3DES、AES、ChaCha20
非对称加密算法
常用的有:DH、DSA、RSA、 ECC
默认端口
- http请求的默认端口为80端口,也就是说,当我请求
http://yexindong.com
时,其实是请求了这个网站的80端口,也就是这样的http://yexindong.com:80
; - https的默认端口为443端口,当我请求
https://yexindong.com
时,其实是请求了这个网站的80端口,也就是这样的https://yexindong.com:443
;
443端口能改吗?
能改,但是改了之后就不能用了;因为当我们去请求一个https协议的网站时,浏览器会直接去请求 服务器的443 端口,找不到这个端口就会返回错误;这是浏览器已经约定好的; 除非在访问的时候加上端口号 :https://www.yexindong.com:444
证书的签发过程:
- 服务方 Server 在自己的计算机上生成一对密钥:公钥和私钥
- 服务方 Server 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
- CA 通过线上、线下等多种手段验证申请者Server提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
- 如信息审核通过,CA 会向申请者Server签发认证文件–也就是ca证书。这个ca证书是由 ca机构 自己的私钥生成的,既然是ca机构的私钥生成的,那就要用ca机构的公钥才能解开(客户端【浏览器】会内置CA的证书信息【包含公钥】);
ca证书内容
证书包含以下信息:
- 申请者公钥
- 申请者的组织信息
- 申请者个人信息
- ca机构信息
- 有效时间
- 证书序列号
- 信息明文
- 签名
https 请求流程
- 客户端client 向服务器 server 发出https请求时,server返回ca证书文件(证书中有server的公钥);
- 客户端client 使用根证书验证 ca 证书合法性,(刚刚说过客户端会内置信任 CA 的根证书信息(包含公钥)),就是由这个根证书去验证的;
- 客户端 client 生成一个随机值 N ,在通过证书中的公钥对这个随机值 N 进行加密,得到一个非对称密钥,最后发给服务器;
- 服务器server 收到这个这个非对称密钥后,使用自己的私钥进行解密,得到了随机值 N 的值;
- 客户端 client 和 服务端 server 从此以后都使用这个随机值 N 进行对称加密进行通讯;
- 服务端 server 将真实数据进行对称加密后,得到一串密文,发给客户端 client
- client 端收到密文后,使用随机值 N 对密文进行解密,得到真实数据;
为什么后面使用对称
加密? 而不使用非对称
加密?
非对称加密所消耗的时间和资源更大,效率也不高,所以在认证成功之后,服务器和客户端就开始按照约定的随机值 N ,对后续的数据传输都使用对称加密。
为什么需要 CA 认证机构颁发证书?
HTTP 协议被认为不安全是因为传输过程容易被监听者勾线监听、伪造服务器,而 HTTPS 协议主要解决的便是网络传输的安全性问题。
首先我们假设不存在认证机构,任何人都可以制作证书,这带来的安全风险便是经典的“中间人攻击(黑客)”问题。
以上是关于终于搞明白了https的底层请求流程的主要内容,如果未能解决你的问题,请参考以下文章