HTTPS协议
HTTPS是Hypertext Transfer Protocol Secure超文本传输安全协议,是具有安全性的加密传输协议。
-
HTTPS并⾮⼀个新协议,
HTTPS = HTTP + SSL/TLS。- 以前是HTTP直接和TCP通信;
- 现在是HTTP则先和安全层通信,然后安全层再和TCP层通信。不影响原有的HTTP协议和TCP协议。
HTTP问题
将HTTP数据提交给TCP层之后,数据会经过⽤⼾电脑、WiFi路由器、运营商和⽬标服务器,在这中间的每个环节中,数据都有可能被窃取、伪造和篡改。
- 明文传输不加密,直接暴露给外界,内容可能被窃听;--信息加密。
- 不验证通信方的身份,有可能遭遇伪装;--身份验证。
- 无法证明报文的完整性,有可能已遭篡改。--完整性保护。
安全层
在TCP和HTTP之间插⼊⼀个安全层,所有经过安全层的数据都会被加密或者解密。
-
HTTPS所有的安全核⼼都在安全层。
-
安全层职责:
- 对发起HTTP请求的数据进⾏加密操作。
- 对接收到HTTP的内容进⾏解密操作。
-
安全层协议:SSL/TLS协议。
- SSL是Secure Sockets Layer安全套接字协议。
- TLS是Transport Layer Security传输层安全。
安全层流程/HTTPS请求过程
TLS四次握手:
-
先浏览器向服务器发送对称加密套件列表、⾮对称加密套件列表、随机数client-random;
加密套件是指加密的⽅法,加密套件列表就是指浏览器能⽀持多少种加密⽅法列表。
-
服务器保存随机数client-random,发送对称加密方法、⾮对称加密方法、随机数servicerandom、包含公钥的数字证书给浏览器;
-
浏览器端验证数字证书。
-
浏览器保存公钥,利⽤client-random和service-random计算出pre-master,pre-master被公钥加密后发送给服务器端;
-
服务器私钥解密出pre-master数据,并返回确认消息。
-
服务器和浏览器就有了共同的client-random、service-random、pre-master,服务器和浏览器分别使⽤这三个随机数⽣成对称密钥。双⽅使用对称密钥进⾏数据加密传输。
加密方式
对称加密
指加密和解密都使⽤的是相同的密钥。也只有一个密钥。
-
通过加密⽅法 + 两个随机数,服务器和客⼾端决定同一个密钥。其通讯方式是一对一。
-
优点:简单、性能好。
-
缺点:
- 因为明⽂传输加密⽅法、两个随机数,所以⿊客也可以通过加密⽅法 + 两个随机数合成密钥,则黑客可以解密浏览器向服务器的数据、解密服务器向浏览器的数据。
- 无法解决首次把秘钥发给对方的问题,容易被黑客拦截秘钥。
非对称加密
有A、B两把密钥,如果你⽤A密钥来加密,那么只能使⽤B密钥来解密;反过来,如果你要B密钥来加密,那么只能⽤A密钥来解密。
-
秘钥对,一个是公开的公钥,一个是保密的私钥。公钥加密的信息只有对应的私钥可以解开,私钥加密的信息只能对应的公钥解开。
-
一般是服务器的公钥公开给所有客户端,服务器的私钥自己保存。服务器发出的信息能够被所有的客户端解密,客户端发出的信息只能由服务器解密,其通讯方式是一对多。
-
优点:安全性较高。
- 服务器明⽂传输公钥给浏览器,浏览器端向服务器端发送数据时,使⽤该公钥来加密数据,只有服务器拥有的私钥才能解密数据。所以即便⿊客截获了数据和公钥,也⽆法解密数据。保证浏览器发送给服务器的数据安全。
-
缺点:
- 效率低,影响加解密数据的速度,进⽽影响到⽤⼾打开⻚⾯的速度。
- ⿊客可以获取到公钥,则黑客可以解密服务端向浏览器端的数据,⽆法保证服务器发送给浏览器的数据安全。
混合加密
对称加密 + 非对称加密。通过非对称加密的⽅式来传输密钥,对称加密的⽅式传输数据。
- 浏览器通过两个随机数计算出来pre-master,pre-master被公钥加密后发送给服务器端;服务器用私钥解密出pre-master;通过加密⽅法 + 三个随机数,服务器和客⼾端决定同一个密钥。
- 不同节点采用不同的对称秘钥,实现一对一,解决上面两个方法的缺点。
- 优点:pre-master被公钥加密,⿊客没有私钥⽆法获取pre-master,后续内容⿊客也无法获取。
数字证书
CA是Certificate Authority权威机构,颁发数字证书Digital Certificate。
- 可类比于房管局权威机构颁发房产证证书。服务器也需要CA权威机构颁发数字证书Digital Certificate。
数字证书的作用
-
服务器有数字证书则说明服务器时被CA机构认证过,服务器可靠,服务器可以向浏览器证明⾝份。
防止黑客伪造服务器身份,即便⿊客伪造了服务器,黑客服务器没有正规证书,所以依然⽆法欺骗⽤⼾。
-
数字证书⾥⾯包含了服务器公钥。
申请数字证书
-
服务器需要准备⼀套私钥和公钥,私钥留给⾃⼰;
-
服务器向CA机构提交公钥、公司、站点等信息并等待认证,这个认证过程可能收费;
-
CA通过线上、线下等多种渠道来验证极客时间所提供信息的真实性,如公司是否存在、企业是否合法、域名是否归属该企业等;
-
如果信息审核通过,CA向服务器签发认证的数字证书,包含了服务器公钥、组织信息、CA信息、有效时间、证书序列号等,这些信息都是明⽂的,同时包含⼀个CA机构的签名。
- CA机构使⽤Hash函数来计算服务器提交的明⽂信息,得出信息摘要;使⽤CA机构的私钥加密信息摘要,加密后的密⽂就是数字签名。
- 数字证书包括:服务器提交的明文信息、数字签名。
- 可以通过数字签名来验证CA机构是否合法。
浏览器验证数字证书
-
浏览器读取证书中相关的明⽂信息,采⽤CA签名时相同的Hash函数来计算并得到信息摘要A;
-
利⽤对应CA机构的公钥解密数字签名,得到信息摘要B;
-
对⽐信息摘要A和信息摘要B,如果⼀致,则可以证明CA机构合法、服务器身份合法。
-
如果CA可能⽐较⼩众,浏览器不知道该不该信任它,浏览器会继续查找给这个CA颁发证书的CA,再以同样的⽅式验证它上级CA的可靠性。
通常情况下,操作系统中会内置信任的顶级CA机构的证书/为根证书/⾃签名证书、顶级CA机构的公钥,如果这个CA链中没有找到浏览器内置的顶级的CA,证书也会被判定⾮法。
hash函数/摘要算法
用于验证信息的完整性,防止信息篡改,解决黑客篡改数据的问题。
- 是一种特殊的压缩算法,单向不可逆,对输入数据非常敏感,把输入数据“压缩”成固定长度、独一无二的“摘要”字符串,任何数据的修改都会改变散列函数的结果,相当于给输入数据生成数字“指纹”。
- 传输时在原文后附上摘要,网站收到后计算摘要,对比如果一致说明消息是完整可信的没有被修改。
HTTPS优缺点/特点
优点:
-
具有信息加密、完整性保护、身份验证;
认证用户和服务器,确保数据发送到正确的客户端和服务器;大幅增加了中间人攻击的成本。
缺点:
- 加密和解密,耗费更多服务器资源,过程复杂;
- 四次握手比较费时,增加页面的加载时间;
- 数字证书收费,功能越强大的证书费用越高;证书需要绑定IP,不能再同一个IP上绑定多个域名。
- 服务器端资源占用高,支持访客稍多的网站需要投入更大的成本。
HTTPS与HTTP区别
- 安全性:HTTP协议明文传输数据不安全;HTTPS是HTTP协议的安全版本,使用SSL/TLS协议进行了加密处理,相对更安全
- 证书及费用:HTTP协议不需要证书;HTTPS需要数字证书。
- 连接方式:HTTP无连接,无状态;HTTPS由于加密以及四次握手,性能低。
- 端口:HTTP默认端口是80;HTTPS默认端口是443。
- 缓存:HTTPS缓存不如HTTP高效,会增加数据开销。