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