关于HTTP的安全篇-HTTPS

49 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

众所周知,HTTP是明文传输的,传输过程都是透明的,谁都可以在链路中截获、修改或者伪造请求 / 响应报文,因此数据不具有可信性。那么,这一安全性问题也需要解决。则需要引出本文的主角——HTTPS。

HTTPS

相比于HTTP,HTTPS的语法、语义仍然是HTTP,应答模式、报文结构、请求方法、UPI头字段等都仍沿用HTTP,不过协议名和端口名不相同,新的协议名为https,默认端口为443,同时也不再是明文传输,也不再不安全。

HTTPS 与 HTTP 最大的区别也就是:它能够鉴别危险的网站,并且尽最大可能保证你的上网安全,防御黑客对信息的窃听、窜改或者钓鱼、伪造。

那么,HTTPS是如何保证安全性的呢?如下图所示。其实就是靠SSL/TLS进行支撑。

image.png

SSL:即安全套接层,位于OSI模型的会话层,时至今日,已经是一个非常好的安全通信协议。

TLS:由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术。

因此可以得出HTTPS 的安全性是由 TLS 来保证的,那么具体是如何为 HTTP 增加了机密性、完整性,身份认证和不可否认等特性,答案就是加密。

加密

加密其实就是把消息用某种方式转换成谁也看不懂的乱码,只有掌握钥匙的人才能再转换出原始文本。这其中的钥匙也就是密钥,这一过程叫做解密。

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

对称加密是指加密和解密时使用的密钥都是同一个,是对称的。

非对称加密是指它有两个密钥,一个是公钥,一个是私钥。两个密钥是不同的,也就是不对称的,公钥可以公开给任何人使用,而私钥必须严格保密。

相比于对称机密,非对称加密可以解决密钥交换的问题。网站秘密保管私钥,在网上任意分发公钥,你想要登录网站只要用公钥加密就行了,密文只能由私钥持有者才能解密。而黑客因为没有私钥,所以就无法破解密文。但,非对称加密 虽然可以保证安全,但是其都是基于复杂的数学难题,运算速度特别慢,那么这样看来,非对称加密的实用性也不高。

这时候就有人会想到,把对称加密和非对称加密结合起来是不是可以即能高效地加密解密,又能安全地密钥交换呢?答案是没错的,TLS 里使用的就是这种混合加密方式。大致流程如下:

  1. 在通信刚开始的时候使用非对称算法,比如 RSA、ECDHE,首先解决密钥交换的问题。
  2. 然后用随机数产生对称算法使用的会话密钥,再用公钥加密。因为会话密钥很短,通常只有 16 字节或 32 字节,所以慢一点也无所谓。
  3. 对方拿到密文后用私钥解密,取出会话密钥。这样,双方就实现了对称密钥的安全交换,后续就不再使用非对称加密,全都使用对称加密。