0@[toc]
什么是HTTPS
HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层.
HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况而HTTPS则是新采用加密的方式进行传输
为什么需要HTTPS
为什么要使用HTTPS呢?这其实当然是因为我们在实际生活中由于我们的HTTP用的是明文传输这就导致我们自己的数据很容易泄露这就导致这些数据会被别有用心之人拿到做坏事比如说,移动,联通,电信这三大运营商。
在使用HTTPS之前有哪些不好的现象
在没有使用HTTPS之前,那时候运营商劫持事件非常的猖獗,比如说我们要下载一个软件,下载之后发现这并不是我们要下载的那一款软件,这就非常恶心了,因此为了防止这种现象发生,各大公司就开始自发的使用HTTPS进行传输数据了。
HTTPS安全性是如何做到的
他是使用加密的手段进行的,那么如何进行加密的呢这里就涉及到到了密钥的这个概念。那么什么是密钥呢?我们看看下图
下图中慈溪太后拿到了一封信,这封信上的内容大部分都是无关紧要的,只有另一张纸上的洞进行对比才能得到真正的内容,而这张破洞的纸其实就是密钥,而密钥又分为对称密钥和非对称密钥
什么是对称密钥
首先什么是对称密钥呢?我们还是以上面为列,慈溪太后在拿到这张内容的时候要用破洞的纸对信的内容做解密,那么传给他这封信的那个人,在写下这个内容的时候是不是也需要用这张破洞的纸把自己想要写的内容写在这个洞对应的位置下啊?那么是不是说这张纸即做了加密的工作也做了解密的工作,那么这张纸就是一个对称密钥,也就是说对于密钥来说,一个密钥同时做加密和解密那么这个密钥就是对称密钥。
什么是非对称密钥
那么什么是非对称密钥呢?非对称密钥以上面为列,也就是慈溪手上有两张纸一张纸用来加密一张纸用来解密,这里我们要注意,其实在现实生活中我们认为的钥匙和锁就是锁用来加密钥匙用来解密,但是在计算机中,这个密钥是既能用来加密也能用来解密。而非对称密钥则以加密和解密分为了公钥和私钥
公钥和私钥
什么是公钥呢?公钥就是用来让别人将自己的密文进行加密,加密之后发送而来然后自己解密用的密钥叫做私钥其实这里的公钥私钥的区别就是公钥加密私钥解密。
HTTPS如何保证的安全性
HTTPS中可能存在的危险情况
首先我们要先知道对称密钥加密和非对称密钥,以及对称非对称共同使用这几种状况中可能出现的漏洞。我们来逐一分析
对称密钥加密
此时我们如果直接使用对称进行加密的话那么我们的对称密钥也会被黑客接收到,这就 导致我们的消息在黑客眼里也是没有任何隐私可言的。
非对称加密
那么此时我们如果全部使用非对称加密是否可以呢?非对称加密他的效率是非常的低效的,而且不仅效率低,安全性其实也并不是很高。不信?我们来看看吧
因此这种方法不仅效率低下而且还不安全我们在实际开发中使用的是哪种方式呢?
非对称密钥与对称密钥互相配合的加密通信方式
此时用这种方式我们发现虽然我们的效率得到了一定的提升可是这也迎来了一种问题那就是如果黑客还是采取上面的那种方法的话我们的安全性问题还是没有得到保证啊那该怎么办呢?我们来看看最终 的解决办法
最终的解决办法
首先我们要知道为什么上面的方法不行?很明显是因为我门没有能力去分辨路由器给我们的公钥究竟是目标服务器发来的还是我们黑客发来的,那么这时候假如说能找到一个公证人就可以解决了,这时候也就引入了安全证书。
什么是安全证书
什么是安全证书呢?安全证书其实就是我们发送自己的公钥的时候这里面会有一个字段保留了一个字符串这个字符串表明自己是安全的,这个证书我们称之为ssl证书SSL证书是一种数字证书,由权威的证书颁发机构颁发。它包含了一个公钥和有关证书所有者的一些信息,如名称、组织、邮箱等。SSL证书的主要作用是实现数据加密和身份验证,确保数据在传输过程中的安全性和完整性。数据加密:SSL证书通过使用加密算法对数据进行加密,确保数据在传输过程中的安全性和完整性。即使数据在传输过程中被截获,攻击者也无法轻易地解密和篡改数据。
身份验证:SSL证书还包含了对网站所有者的身份验证。当用户访问一个使用SSL证书的网站时,浏览器会验证该证书是否由权威的证书颁发机构颁发,并验证网站所有者的身份信息。这可以防止中间人攻击和钓鱼网站等安全威胁。
防止数据篡改:通过使用SSL证书,HTTPS协议能够检测数据在传输过程中是否被篡改。如果数据被篡改,SSL证书将无法验证通过,从而保证了数据的完整性和可信度。
因此当一个正规的网站服务器给我们发送他的公钥的时候我们是可以通过检验对方的安全证书判断其是否安全。
但是这时候我们可能会有一个想法那就是,假如说黑客能够申请到安全证书并且将密钥上携带的安全证书更改为自己机构的安全证书呢?这里就涉及到了安全证书的检验
安全证书的检验
当我们收到了安全证书之后我们是要判断这个安全证书是否被修改的,那么如何判断呢?验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为hash2. 对比 hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的。.
检验细节
这里我们上面说的可能会感觉有些抽象,假设我们的证书只是一个简单的字符串 zyfcl, 对这个字符串计算hash值(比如md5), 结果为BC4B2A76B9719D91
如果 hello 中有任意的字符被篡改了, 比如变成了 zyfcll, 那么计算的 md5 值就会变化很大. BDBD6F9CF51F2FD8
然后我们可以把这个字符串 hello 和 哈希值 BC4B2A76B9719D91 从服务器返回给客户端, 此时客户端如何验证 hello 是否是被篡改过? 那么就只要计算 hello 的哈希值, 看看是不是 BC4B2A76B9719D91 即可.并且这里面这个hello的哈希值也是加密传输的,他是服务器使用私钥加密我门的主机里面会存储这个证书机构的公钥然后我们用公钥解密就可以了。