前端需要了解的HTTPs

我们在工作过程中多少都会接触HTTPs,也不乏有些小伙伴工作几年仍旧不了解HTTPs的意义。那今天就想略过底层简单讲解一下作为前端有必要了解的HTTPs。

协议Protocol

HTTPS(Hypertext Transfer Protocol Secure)是基于TLS或SSL加密协议传输的HTTP协议。7层网络模型中,HTTP用于应用层,而TLS或SSL用于传输层。

TLS(Transfer Layer Secure),前身为SSL(Secure Sockets Layer),简单来说他两可以看作为不同的版本。目前最新版是TLS 1.3,相较于1.2版本去掉了比较旧容易被**的加密算法选项,增加了证书动态更新交换的协议以防止中间人缓存用户公钥来获取用户其他信息等等,很有意思,有兴趣的话可以深入了解一下。

PKI证书体系

前端需要了解的HTTPs

首先从整体上了解一下这个验证的体系——PKI(Public Key Infrastructure)公钥基础设施。简单来说是个人或企业可以用自己的**向证书颁发机构(Certificate Authority)申请签名授权,CA验证后为其颁发签名证书(以上的登记机构可以是CA本身或由CA认证的第三方)。个人或企业在部署服务器上安装已授权的证书后,用户请求时会找CA验证证书是否有效,达到一个检验安全性的目的。

证书Cert

我们在使用HTTPS的时候,会要求购买或上传证书(Cert)。证书是由购买者生成一对公私钥,并将公钥上传到证书颁发机构(Certificate Authority)生成的。

CA或CA认证的第三方负责验证申请证书方的身份和合法性,并签名(Sign)授权颁发电子证书。签名和验证签名的过程大概是这样(了解一下就好):

前端需要了解的HTTPs

其中可以看到需要用到CA的私钥加密。CA拥有多个层级的证书,呈树状结构。CA不会用根级的证书为用户授权。究其原因,就得了解一下证书信任链,如下图所示:

前端需要了解的HTTPs

(以上根CA除了一些机构外,还包括像微软、苹果等做操作系统的大厂)

也就是说最终用户拿到的证书,是用户公钥信息+多个CA证书签名机构信息的产物。而越是接近级别的证书可信度越大。应用程序(像Chrome浏览器),接收请求的服务器等等就可以选择信任某一级证书来校验被授权用户的合法性。

好啦就到这里。以上除了参考Wikipedia之外,有部分内容是来自陶辉老师的“Web协议与抓包实战”上课时做的笔记,想了解更多的话可以看一下

前端需要了解的HTTPs