一、Https为什么安全
讲到https安全,那就看http为什么不安全。
1、明文传输
2、信息被监听和篡改。
3、无法验证通讯对象,有被冒充的风险。
HTTPS就是为解决这些问题的。
二、概念介绍
消息摘要(Message Digest)
消息摘要就是在消息的基础上,执行一个单向的Hash函数,生成一个固定长度的Hash值,这个hash值就是消息摘要。(只能进行正向的信息摘要,无法从中恢复出任何消息)
消息摘要只能保证消息的完整性,并不能保证消息不可篡改。
常用信息摘要算法:MD5(128bit) SHA-1(160bit) SHA-256(256bit)
数字签名(Digital Signature)
类似于现实世界的签名,像是"签章"一样。
签名的作用:(保证可认证、不可抵赖、完整性)
1、保证消息来源的准确性。
2、消息没有被篡改。
3、不可否认性。
一个完整的数字签名方案应该有两部分组成:签名算法 和 验证算法。事实上,任何一种公钥密码体制都可以单独作为一种数字签名方案使用(私钥加密,公钥解密),现实中 数字签名是 非对称机密技术 + 信息摘要 技术的结合。既满足了性能,又能保证安全性。
签名过程:(通过签名过程得到内容 就是 原始信息的数字签名)
1、用摘要算法对消息进行摘要。
2、再把摘要用信源的私钥加密。
验证过程:
1、原始消息使用同样摘要算法得到信息摘要H1
2、使用预先得到的公钥解密 数字签名,得消息摘要M1(若无法解密,则代表签名被篡改过,验证失败)
3、判断H1 M1是否相等。相等,没有被篡改,且法发送者明确。不等,则代表被篡改。
数字证书
刚才说了那么多,都是基于一个前提:消息的接受者必须事先得到正确公钥,而很多时候根本就不具备事先沟通公钥的信息通道。数字证书是为了解决公钥安全发放的问题,数字证书由权威的CA机构颁发,证书的主要内容有:
- 证书所有者的公钥
- 证书的颁发机构
- 证书有效期
- 数字证书的签名 & 数字证书的签名算法(用来验证证书有效性)
- 数字证书的摘要 & 数字证书的摘要算法(用来验证证书的有效性)
数字证书用来解决公钥的发放问题,只要证书能通过验证,就能保证持有者的公钥无误,从而达到安全发放的目的。
数字证书本质上是 CA机构使用 根私钥 把相关信息(证书所有者信息、公钥、发证机构等等)进行加密。
三、Https请求原理及数字证书验证。
https.jpg
Https中的加密算法包含: 非对称加密 和 对称加密算法。
- 最终对信息进行加密的是对称加密算法,让通信双方都能拿到对称加密算法的秘钥,简称R,就能够互相理解双方信息,即便被截获也无法,解密内容。
- R 是通过非对称加密算法进行传递的。公钥 + R = 密文,把密文给到服务端,只有服务端通过 私钥 解密,最后服务端拿到通信钥匙 R
这就是涉及到 公钥的安全发放问题了,用户不可能直接对接那么多服务端网站,且也没有实现沟通的机制。有第三方机构CA来做证书的发放。CA除了跟别人办法证书以外,它自己也有证书,这个证书是自己给自己颁发的,为了区分我们称它为根证书。根证书也有自己的公钥和私钥。CA机构 根公钥在设备出厂的时候就已经内置到了设备中,像Chrome这种软件中也内置了,所以CA机构根公钥是一定可信的,只有这样才能验证 证书的真伪,从而确定 证书中发放的公钥的真伪。
浏览器对于证书的认证包含三点信息:
- 证书是否为受信任的权威机构颁发
- 证书是否被篡改过。
- 证书是否为我们想要的那个证书。
认证具体过程具体过程:
1、浏览器在接收到证书以后,就要开始验证工作了。首先从证书中获取证书的颁发机构。然后去寻找此颁发机构对应的根证书,如果系统中没有则代表此机构是不受信任的。
2、如果是受信任的的CA机构,从根证书中找到公钥,用根公钥去解密证书签名(如果解密失败,代表证书被篡改,或者破坏),得到证书指纹(摘要);再用指纹(摘要)算法对证书的原内容进行计算;两次结果进行对比,如果一致,代表内容未被篡改,否则代表证书内容被篡改。
3、在保证证书没有被篡改的基础上,再验证使用者使用的URL 和 我们请求的URL是否相等。相等,代表当前浏览连接的网站也是正确的,而不是一些钓鱼网之类的。
网友评论