一文搞懂HTTPS:从加密到安全通信
一文搞懂HTTPS:从加密到安全通信
在互联网的世界里,信息安全至关重要。HTTPS作为HTTP的安全版本,为我们的数据传输提供了一层保护。本文将详细解析HTTPS的工作原理,从加密的基本概念到HTTPS如何确保数据的安全传输,让你一文搞懂HTTPS。
HTTPS ?
🥥HTTPS,全称为超文本传输安全协议(HyperText Transfer Protocol Secure),是一种在HTTP协议基础上引入加密层的应用层协议。它的核心作用是保护数据传输的安全,防止数据在传输过程中被窃取或篡改。
HTTPS通过引入加密机制,确保即使数据被截获,也无法被解读,从而保护用户数据的安全。这在涉及敏感信息,如登录凭据、支付信息等场景中尤为重要。
运营商劫持
🍑HTTP协议以明文方式传输数据,这意味着任何在传输途中的第三方都可以轻易地查看或修改数据。
例如,运营商可以劫持用户请求,将原本的下载链接替换为另一个链接。客户端向服务器发送HTTP协议的下载请求,途经运营商设备,运营商设备转发该请求并从服务器获取下载链接,此时运营商将原链接替换为“广告链接”,返回给客户端。
这就是臭名昭著的“运营商劫持":
🍓明明下载的是某音乐软件,点击后的下载链接却是某浏览器的安装包...
加密 ?
🫐加密是信息安全的基础,它涉及将明文(原始信息)转换成密文(加密后的信息)的过程。解密则是将密文恢复为明文的过程。在加密和解密的过程中,往往需要一个或者多个中间数据,辅助进行这个过程,这样的数据称为"密钥"。
对称加密
🍎对称加密使用同一个密钥进行加密和解密。这种方法的优点是加密和解密速度快,适合大量数据的处理。
🥝经过对称加密,即使请求被截获,如果不知道密钥,就无法进行解密,也就无法知道请求的真实内容是什么。
当然,密钥也是需要通过网络传输的,如果密钥在传输过程中被截获,加密就失去了意义。所以对称加密的缺点是密钥分发困难,因此密钥的传输也必须进行加密!但是要想对密钥进行对称加密,就仍然需要先协商确定一个“密钥的密钥”。这就成了“先有鸡还是先有蛋”的问题了。此时密钥的传输再用对称加密就行不通了。 就需要引入非对称加密。
非对称加密
🍇非对对称加密使用一对密钥,即公钥和私钥。公钥可以公开,用于加密数据;私钥必须保密,用于解密数据。这种方法解决了密钥分发的问题,但计算速度较慢。
想象一下,你有一个非常特别的邮箱和一把钥匙:
邮箱(公钥):这个邮箱有一个特点,任何人都可以往里面投信,但是一旦信件投进去,没有人能够从外部把它取出来。这个邮箱就像是一个公开的地址,任何人都可以使用,相当于非对称加密中的公钥。
钥匙(私钥):你手中有一把钥匙,只有你拥有这把钥匙,你可以用它打开邮箱取出里面的信件。这把钥匙是私密的,只有你一个人拥有,相当于非对称加密中的私钥。
在这个场景中,如果有人想要给你发送一封保密信件,他们会怎么做:
写信:发送者写下想要传递的信息。
加密:发送者不需要担心钥匙的安全问题,因为他们只需要把你的邮箱(公钥)作为信箱,把信件放进去。这个动作可以看作是用公钥加密信息。
投递:发送者把信件投进你的邮箱。
收信:你收到信件后,由于只有你有钥匙(私钥),你可以打开邮箱取出信件,并阅读信件内容。这个动作相当于用私钥解密信息。
这个过程中,即使有人看到了邮箱里有信件,他们也无法取出,因为他们没有你的钥匙。同样,即使有人知道你的钥匙长什么样,他们也无法复制一个能够打开邮箱的钥匙,因为这种邮箱的设计是单向的——只能进不能出。
🍉下文带你进入详细理解⬇
HTTPS的工作过程
🍊HTTPS的工作过程涉及到对称加密和非对称加密的结合使用。(图文结合,更好理解)
密钥交换
客户端生成对称密钥:客户端生成一个对称密钥,用于后续的加密通信。
使用公钥加密对称密钥:客户端使用服务器的公钥加密这个对称密钥。
传输加密的对称密钥:客户端将加密后的对称密钥发送给服务器。
数据传输
服务器解密对称密钥:服务器使用自己的私钥解密客户端发送的对称密钥。
使用对称密钥加密数据:客户端和服务器使用解密后的对称密钥对数据进行加密和解密,进行安全的通信。
由于对称加密的效率高很多,因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密。
那么接下来问题又来了:
客户端如何获取到公钥?
客户端如何确定这个公钥不是黑客伪造的?
中间人攻击
🍍 简单形象的来说,在甲乙两人相互知道对方存在但却没有见过面的情况下,丙对甲谎称自己是乙,又对乙谎称自己是甲,两头骗!这就是中间人攻击。
劫持者可以使用中间人攻击来轻易地替换传输中的公钥,从而截获和篡改通信数据。
- 服务器具有非对称加密算法的公钥S,私钥S'
- 中间人具有非对称加密算法的公钥M,私钥M'
- 客户端向服务器发起请求,服务器明文传送公钥S给客户端
- 中间人劫持数据报文,提取公钥S并保存好,然后将被劫持报文中的公钥S替换成为自己的公钥M,并将伪造报文发给客户端
- 客户端收到报文,提取公钥M(客户端不知道公钥被更换过),自己形成对称秘钥X,用公钥M加密X,形成报文发送给服务器
- 中间人劫持后,直接用自己的私钥M'进行解密,得到通信秘钥X,再用曾经保存的服务器端公钥S加密后,将报文推送给服务器
- 服务器拿到报文,用自己的私钥S'解密,得到通信秘钥X
- 双方开始采用X进行对称加密,进行通信。但是一切都在中间人的掌握中,劫持数据,进行窃听甚至修改。
引入证书
🥑HTTPS通过证书机制来防止中间人攻击。服务端在使用HTTPS前,需要向CA(证书颁发机构)申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥,证书就如同身份证,证明服务端公钥的权威性。
🥥证书可以理解为一个结构化的字符串,里面包含了以下信息:
- 证书发布机构
- 证书有效期
- 公钥
- 证书所有者
- 签名
- ......
🍑需要注意的是:申请证书时,需要在特定平台生成一对密钥,即公钥和私钥。这对密钥对就是用来在网络通信中进行明文加密以及数字签名的。
理解数据签名
签名的形成是基于非对称加密算法的。注意,目前暂时和HTTPS没有关系,不要和HTTPS中的公钥私钥搞混了。
🍓当服务端申请CA证书的时候,CA机构会对该服务端进行审核,并专门为该网站形成数字签名,过程如下:
- CA机构拥有非对称加密的私钥A和公钥A'
- CA机构对服务端申请的证书明文数据进行hash,形成数据摘要
- 然后对数据摘要用CA私钥A加密,得到数字签名S 服务端申请的证书明文和数字签名S共同组成了数字证书,这样一份数字证书就可以颁发给服务端了。
通过证书解决中间人攻击
🫐客户端在接收到证书后,会进行以下校验:
- 验证证书有效期:检查证书是否过期。
- 验证发布机构:确认证书是否由受信任的CA机构颁发。
- 验证证书是否被篡改:通过对比证书的哈希值和签名解密后的哈希值来确保证书未被篡改。
常见问题
为什么摘要内容在网络传输的时候一定要加密形成签名?
🙉使用摘要算法(如MD5或SHA系列)可以确保数据的完整性。任何对数据的微小更改都会导致摘要值的巨大变化,从而检测到篡改。
为什么签名不直接加密,而是要先hash形成摘要
🙉先进行哈希处理可以减少加密的数据量,提高签名验证的速度。
HTTPS完整流程
HTTPS的完整流程涉及客户端和服务器之间的一系列交互,包括密钥的生成、证书的传输和验证、以及最终的加密通信。
总结
HTTPS工作过程中涉及到的密钥有三组。
第一组(非对称加密):用于校验证书是否被篡改。服务器持有私钥(私钥在注册证书时获得),客户端持有公钥(操作系统包含了可信任的CA认证机构有哪些,同时持有对应的公钥)。服务器使用这个私钥对证书的签名进行加密。客户端通过这个公钥解密获取到证书的签名,从而校验证书内容是否是篡改过。
第二组(非对称加密):用于协商生成对称加密的密钥。服务器生成这组私钥-公钥对,然后通过证书把公钥传递给客户端。然后客户端用这个公钥给生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥。
第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密。 其实一切的关键都是围绕这个对称加密的密钥。其他的机制都是辅助这个密钥工作的。
第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥。
第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器。
🍎通过以上步骤,HTTPS确保了数据在互联网上的安全传输,保护了用户隐私和数据完整性。随着技术的发展,HTTPS已成为现代互联网通信的标配,为构建安全的网络环境提供了坚实的基础。