HTTPS协议

在这里插入图片描述

文章目录

  • 一、HTTPS是什么?
    • 运营商劫持
    • 加密是是什么?
  • 二、HTTPS工作过程
    • 对称加密
    • 非对称加密
    • 证书

一、HTTPS是什么?

HTTPS:HTTP + 安全层(SSL),HTTPS也是应用层协议,在HTTP协议的基础上引入了一个加密层,因为HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况

运营商劫持

不知道大家有没有这种现象,想要下载一款软件的时候,在网页点击下载的时候并不是直接下载的该软件,而是某一款应用商城。
我们点击下载按钮,给服务器发送一个HTTP请求,获取到的HTTP响应其实就包含该软件的下载链接,运营商劫持之后,就发现这个请求是要下载该软件,那么就自己的把要交该用户的响应给篡改成"应用商城"的下载地址了
HTTPS协议_第1张图片
为什么运营商会劫持?
最主要的原因还是HTTP在互联网上是明文传输,让运营商有了可乘之机

HTTPS就是为了避免这种情况的发生,在HTTP的基础上进行了加密,进一步的来保证用户的信息安全

加密是是什么?

加密:加密就是将铭文进行一系列变换,生成密文
解密:解密就是把密文在进行一系列变换,还原成明文

在这个加密和解密的过程中,往往需要一个或多个中间的数据,辅助进行这个过程,这样的数据称之为密钥

二、HTTPS工作过程

HTTPS在网络传输中不再直接传输明文了,而是加密之后的密文,HTTPS主要涉及到SSL部分,但SSL部分并不是只在HTTPS中使用,加密方式有很多种,但整体可以分为两大类:对称加密非对称加密

对称加密

加密:明文 + key => 密文
解密:密文 + key => 明文
这里的key是同一把密钥,既可以用来加密,也可也用来解密,我们称之为对称密钥
HTTPS协议_第2张图片
既然是对称加密,那么客户端和服务器都需要密钥,那么是由客户端生成密钥还是由服务器生成密钥呢?
因为每个服务器对应很多客户端,每个客户端都有不同的密钥,所以我们这里是由客户端生成密钥,但是客户端虽然生成了,服务器还不知道该密钥,于是在传输数据之前需要先将密钥发送给服务器
HTTPS协议_第3张图片
当客户端生成密钥后,将密钥发送给服务器,但由于服务器并不知道密钥,于是这里的密钥只能进行明文传输,一明文这里的密钥就有可能被黑客给截获,那么后续的加密操作就形如虚设了。
因此,我们这里的密钥的传输必须进行加密传输
都拿手我们想要对密钥进行加密传输,我们就需要协商一个"密钥的密钥",以此循环都会面临该问题,此时的密钥使用对称加密的方式就行不通了。
因此我们就需要引入非对称加密

非对称加密

非对称加密需要用到两个密钥,一个叫公钥,一个叫私钥,公钥和私钥是配对的,最大的缺点是运算速度非常慢,比非对称加密要慢很多。
明文 + 公钥 => 密文 使用公钥加密
密文 + 私钥 => 明文 使用私钥解密
这里的公钥和私钥可以交换位置,公钥是可以进行公开的。
HTTPS协议_第4张图片
服务器生成一对公钥私钥,客户端持有公钥,服务器持有私钥,此时客户端的公钥从服务器拿,黑客也能够知道公钥,但黑客不知道私钥,因为私钥是服务器私有的。
客户端使用私钥,来对对称密钥加密,传输给服务器,服务器就可以拿着自己的私钥对给密文进行解密获取到对称密钥,此时客户端就可以使用对称密钥对后续数据进行加密传输了。
为什么有了非对称加密,还要继续使用对称加密?
因为对称加密速度快,非对称加密速度慢,为了尽可能提高整体的速度,所以必须使用对称加密

但是即使这样加密之后还是会出现问题,会出现中间人攻击,因为黑客也可以获取到公钥
HTTPS协议_第5张图片
中间人攻击的主要是要让客户端能够辨别出来响应中的公钥是否是服务器真实的公钥,这里我们实际是引入一个证书,本质上是引入一个第三方的公证机构

证书

网站设立之初时,就需要取专门的认证机构去申请证书(提供网站的一些资质证明),如果审核通过之后,就会颁布一个证书,服务器生成的公钥也会在这个证书之中。
客户端在向服务器发送请求获取公钥的时候,就不是单单的获取一个公钥了,而是将整个证书都请求过来,客户端拿到证书之后,就可以对证书进行校验(这里可以通过验证,来判断证书是不是被篡改过的),如果发现证书是无效的,浏览器会直接弹窗警告。
HTTPS协议_第6张图片
客户端拿到证书就会对证书进行校验,证书上面有一个特殊的字段叫做证书的签名。
检验过程:
1.判断证书的有效期是否过期
2.判定证书的发布机构是否受信任(操作系统已经内置了受信任的证书发布机构)
3.验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的.

你可能感兴趣的:(JAVA,EE,计算机网络,http,tomcat,java)