http学习六 https安全

242 阅读4分钟

https的出现是因为http不安全。

1.http明文传输

2.无法证明报文完整可能已经纂改

3.任何人都能发起请求

怎样就是安全?

1.机密性:对数据保密,不能让不相关的人看到不该看的

2.完整性:也叫一致性,数据在传输的过程中没有被篡改

3.身份认证:确认对方的真实身份,保证消息发送给可信的人

什么是https? http+加密+数据完整性+认证=https

新的协议名:https,默认端口号:443。除了协议名和端口和http不一样,其他都一样。

主要在于's'它把 HTTP 下层的传输协议由 TCP/IP 换成了 SSL/TLS

SSL/TLS

SSL:安全套接层(Secure Sockets Layer)

TLS:传输层安全(Transport Layer Security)

目前应用的最广泛的是TLS

OpenSSL

著名的开源密码学程序库和工具包

机密性:加密

加密分为:对称加密和非对称加密

对称加密:加密和解密使用的密钥是同一个

对称加密只使用一个密钥,运算速度快,密钥必须保密,常用的有 AES 和 ChaCha20;

存在问题:如何把密钥安全地传递给对方即密钥交换。

非对称加密:也叫公钥加密算法,有两个密钥一个叫公钥一个叫私钥

公钥和私钥有个特别的“单向”性,虽然都可以用来加密解密,但公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密。

公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢,常用的有 RSA 和 ECC;

混合加密:把对称加密和非对称加密结合起来两者互相取长补短,即能高效地加密解密,又能安全地密钥交换。

混合加密过程总共涉及到三个密钥:

服务器端的公钥和私钥,用来进行非对称加密

客户端生成的随机密钥,用来进行对称加密

但是非对称加密也不能保证数据的安全性因为黑客可以对公钥A进行拦截然后伪装成客户端和服务端去截取数据。

1.黑客窃取公钥A并生成一个自己的公钥A1私钥B1把B1发送给客户端

2.客户端生成随机数并用B1加密

3.黑客拿到客户都数据用A1进行解密拿到密钥C

4.拿到密钥C之后黑客就可以伪装客户端服务端纂改数据了

完整性:摘要算法

实现完整性的手段主要是摘要算法(Digest Algorithm),也就是常说的散列函数、哈希函数(Hash Function)。

摘要算法保证了“数字摘要”和原文是完全等价的。所以,我们只要在原文后附上它的摘要,就能够保证数据的完整性。

你可以把摘要算法近似地理解成一种特殊的压缩算法,它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹”。

常用的摘要算法:MD5(Message-Digest 5)、SHA-1(Secure Hash Algorithm 1),但这两个算法的安全强度比较低,不够安全,在 TLS 里已经被禁止使用了

目前 TLS 推荐使用的是SHA-2。SHA-2 实际上是一系列摘要算法的统称,总共有 6 种,常用的有 SHA224、SHA256、SHA384,分别能够生成 28 字节、32 字节、48 字节的摘要。

身份认证:数字证书和 CA

上面提到过非对称加密不能保证服务端公钥的安全性,所以出现了CA(Certificate Authority,证书认证机构)

它就像网络世界里的公安局、教育部、公证中心,具有极高的可信度,由它来给各个公钥签名,用自身的信誉来保证公钥无法伪造,是可信的。

CA 对公钥的签名认证也是有格式的,不是简单地把公钥绑定在持有者身份上就完事了,还要包含序列号、用途、颁发者、有效时间等等,把这些打成一个包再签名,完整地证明公钥关联的各种信息,形成“数字证书”(Certificate)。

操作系统和浏览器都内置了各大 CA 的根证书,上网的时候只要服务器发过来它的证书,就可以验证证书里的签名,顺着证书链(Certificate Chain)一层层地验证,直到找到根证书,就能够确定证书是可信的,从而里面的公钥也是可信的。

https优化

HTTPS 比 HTTP 增加了一个 TLS 握手的步骤