HTTPS 加密过程详解
HTTPS 中的概念
对比 HTTP 与 HTTPS 网络分层结构
可见:HTTPS
是在 HTTP
协议上加上一层 SSL
(安全协议)层;
密码学的奠基人----艾伦·麦席森·图灵
由于 HTTP
是通过明文进行传输的,因此存在被劫持的风险,所以,引入了加密算法来对明文进行加密处理;下面介绍两种加密方式:
- 对称加密
- 非对称加密
对称加密
因此,密钥的传输也必须进行加密处理!
非对称加密
公钥和私钥是配对的;
- 通过公钥对明文加密, 变成密文;
- 通过私钥对密文解密, 变成明文;
也可以反着用
- 通过私钥对明文加密, 变成密文;
- 通过公钥对密文解密, 变成明文;
由于公钥是对所有人都开放的,因此,也有被黑客篡改的风险,所以需要引入证书来验证真伪;当客户端和服务器刚建立连接的时候, 这时服务器就会给客户端返回一个 证书,该证书中包含了刚才的公钥, 也包含了网站的身份信息;
(类似于人要去公安局办理一个身份证;同样的, 搭建一个 HTTPS 网站要在CA机构先申请一个证书)
当客户端拿到这个证书之后, 需要对证书进行校验(防止证书是伪造的)
- 判定证书的有效期是否过期;
- 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构);
- 验证证书是否被篡改:从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要/签名), 设为 hash1; 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等,如果相等, 则说明证书是没有被篡改过的;
理解数据摘要 / 签名?
类似于工作中遇到的 “报销” 的场景,你拿着发票想报销, 需要领导批准. 但是领导又不能和你一起去找财务, 那咋办?
很简单, 领导给你签个字就行了, 财务见到领导的签字, “见字如见人”;
理解证书篡改的过程?
假设我们的证书只是一个简单的字符串 hello
, 对这个字符串计算hash
值
结果为:BC4B2A76B9719D91
如果 hello
中有任意的字符被篡改了, 比如变成了 hella
, 那么计算的 hash 值就会变化很大
结果为: BDBD6F9CF51F2FD8
但如果黑客把 hello
篡改了, 同时也把哈希值重新计算下, 客户端就分辨不出来了呀;
如下图所示: