“为什么HTTPS更安全”是面试中经常被问到的题目,也是Web开发人员必备的知识。
简单的说,https是在http的基础上增加了**加密、认证、完整性验证**等动作,来保证其安全性。
HTTP+加密+认证+完整性保护=HTTPS
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(SecureSocket Layer)和TLS(Transport Layer Security)协议代替而已。
——《图解HTTP》
HTTPS是为了解决HTTP协议的不足而诞生的, 在介绍HTTPS之前我们先了解下HTTP不足
HTTPS整个通信流程中使用到了两种加密技术
阶段1:通信双方使用非对称加密密钥协商数据传输时的加密算法,并加入随机数生成密钥。
阶段2:通信双方使用阶段1协商的加密算法和密钥对数据进行加密。
为什么要使用两种加密方式?
综合以上两点,在数据通信阶段使用对称加密,在密钥协商阶段使用非对称加密是比较好的方式。
在前面<数据加密>的介绍中,我们提到了整个HTTPS流程使用非对称加密的密钥协商阶段来校验对称密钥。
那么协商阶段,server端是如何把公钥传输给client, 以及client又是如何验证公钥确实是来自目标server?
server的公钥一般是在client(浏览器)发起请求的时候,server端返回给服务器的。(要client在一开始就和世界上所有的server完成对接,然后预先内置公钥是不现实的。如果client要通信的server的数量是机器有限的,那可以在client中直接内置server的公钥)
但是如果只是返回一个公钥,那么client端无法验证公钥是来自于目标server,还是恶意中间人。
如何才能对server端的公钥进行验证呢?HTTPS引入了数字证书(和数字证书认证机构CA)。
client(浏览器)只需要事先内置有限的几家数字认证机构的公钥。 然后server在数字证书认证机构登录自己的公钥,认证机构使用自己的私钥对server的公钥进行数字签名,并颁发数字证书。
数字证书: 服务器的公钥 + 数字认证机构基于服务器公钥的数字签名
数字签名: 认证机构先对服务器的公钥生成摘要,然后用认证机构自己的私钥对摘要进行加密。
client 向 server发起连接时,server会下发数字证书给client。 client利用内置的认证机构的公钥,对server下发的证书进行验证。验证通过,就可以确定证书中的公钥是目标服务器的。
既不能读取报文内容,也不能伪装成通信任何一方,那就不能篡改报文了。因此报文的完整性也可以得到保障。
初始阶段:
客户主机安装客户端(如浏览器), 客户端内置了CA机构公钥。
服务端向CA机构上传自己的公钥,获取CA机构认证的数字证书。
连接通信阶段:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有