HTTP 与 HTTPS 有哪些区别?
1. 安全性:HTTP 是超⽂本传输协议,信息是明⽂传输,存在安全⻛险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP ⽹络层之间加⼊了 SSL/TLS 安全协议,使得报⽂能够加密传输。
2. 建立连接过程:HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之 后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。
3. 端口号:HTTP 的端⼝号是 80,HTTPS 的端⼝号是 443。
4. 证书:HTTPS 协议需要向 CA(证书权威机构)申请p,来保证服务器的身份是可信的。
微信
nginx
lets encrypt
HTTP 的问题
HTTP 由于是明⽂传输,所以安全上存在以下三个⻛险:
- 可能会听:窃听⻛险。
- 通信使用明文(不加密),内容可能会被窃听。
- 不仅听还可能改:篡改⻛险。
- 无法证明报文的完整性,所以有可能以篡改。
- 像这样,请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击。(Man-In-The-Middle attack, MITM)
- 不仅可以改,甚至可以自己生成:伪装⻛险。
- 不验证通信方的身份,因此有可能遭遇伪装。服务端和客户端都有可能遭到伪装。
- 存在隐患:
- web服务器可能被伪装
- 客户端可能被伪装
- 无法确定对方是否具备访问权限
- 无法判定请求是来自何方,出自谁手
- 无意义的请求也会照单全收,可能遭到DoS攻击
如何解决问题
- 听不懂:加密
- 通信的加密
- SSL或TLS组合使用,加密HTTP内容。与SSL组合使用的HTTP被称为HTTPS
- 内容的加密
- 对内容本身进行加密。要求客户端和服务端同时具备加密和解密机制。但内容仍有被篡改的风险。
- 通信的加密
- 能判断是否被篡改:完整性保护
- HTTP协议下可使用MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。但这需要客户端用户本人亲自验证,浏览器无法自动帮用户检查。
- HTTPS中,SSL提供认证和加密处理以及摘要功能。
- 能识别是不是真的:证书
- SSL提供了证书这一手段,可用于确定通信方。证书由值得信赖的第三方提供。
- 客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。
HTTPS
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分使用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。在HTTP和TCP之间加了SSL。
采用SSL后,HTTP就有了加密,证书和完整性保护这些功能。
加密
- 密钥加密技术
- 对称加密(共享密钥加密):加密和解密同用一个密钥。需要先传输共享密钥给对方(不安全)。处理速度快。(公钥加密私钥解密,或私钥数字签名(也是加密)公钥验证签名(也是解密))
- 非对称加密(公开密钥加密):公钥加密(公钥随便公开),私钥密。处理速度慢。
- HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制
- 采用公开密钥加密方式,来交换共享密钥
- 再采用共享密钥加密的方式进行后续的通信。
- https://www.zhihu.com/answer/1600962734
数字签名
数字签名就是使用私钥对数据摘要进行签名,并附带和数据一起发送。
可以起到防篡改、防伪装、防否认的作用。
非对称加密,所有人都可以用公钥发送信息,一个发送者可以伪装成另一个发送者。
假设有一个接受者Alice。如何证明发送者Bob是他自己,不是别人?
Bob 用自己的私钥对邮件内容计算一个「签名」,将「签名」和邮件内容一起发送出去,接受者 Alice 可以使用 Bob 的公钥验证这个签名是否正确,这就叫「验签」。
所以使用数字签名,我们能够鉴别消息的发送者,也就是说黑客无法伪装发送者进行发送数据,也无法篡改。
一般而言,我们不会直接对数据本身直接计算数字签名。如果数据量大的时候计算数字签名将会比较耗时,所以一般做法是先将原数据进行 Hash 运算,得到的 Hash 值就叫做「摘要」。
数字证书
数字证书就是由 CA 机构使用自己私钥,对证书申请者的公钥进行签名认证。
数字证书解决了如何安全分发公钥的问题,也奠定了信任链的基础。
Bob 和 Alice 现在可以依赖于对称加密进行保密通信,也可以依赖于数字签名验证消息是否是对方发送的。
但是这一切的根基是建立在 Alice 持有的公钥确实是 Bob的,反之亦然。
试想,Eve 如果将自己的公钥冒充 Bob 发送给 Alice,然后 Alice 保存了下来,那以后凡是 Bob 发送的消息,反而会验证签名失败,被当做冒充者。
所以,我们这里也需要一个第三方帮 Bob证明 「Bob 的公钥就是 Bob 的公钥」
数字证书叫做「公钥的数字签名」
第三方来帮我们签名,即证书颁布机构(CA),CA 会将:证书的颁布机构、有效期、公钥、持有者(subject)等信息用 CA 的私钥进行签名。
并且将签名结果和这些信息放在一起,这就叫做「数字证书」。
这样,Bob 就可以去 CA 申请一个证书,然后将自己的证书发给 Alice,那么 Alice 如何验证这个证书确实是 Bob的呢? 当然是使用 CA 的公钥进行验签。
注意: CA 的公钥也是需要使用证书来分发的,所以 Alice 的电脑必须安装 CA 的证书,证书里包含了 CA 的公钥。
收到 Bob 发过来的数字证书后,Alice 使用 CA 的公钥进行验证,验证通过即证明这确实是 Bob 证书,也就可以使用证书中包含的 Bob 的公钥,按照之前讨论的流程进行通信。
SSL 为什么慢
- 通信慢。需要额外的SSL通信。
- 处理速度慢。需要CPU加密解密。
