HTTPS 的传输过程
系列文章目录
如何使用代码来构造HTTP请求?_crazy_xieyi的博客-博客
HTTP协议中常见的状态码及其含义_crazy_xieyi的博客-博客
HTTP协议中的“报头”(header)和 “正文“ (body)详解_crazy_xieyi的博客-博客
GET和POST有什么区别?_crazy_xieyi的博客-博客
HTTP协议格式、URL格式及URL encode_crazy_xieyi的博客-博客
Fiddler抓包:下载、安装及使用_crazy_xieyi的博客-博客
文章目录
前言一、对称加密二、非对称加密三、引入证书总结HTTPS的传输过程HTTPS传输就一定能够保证安全吗?
前言
HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层。
因为HTTP 协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况。比如:“运营商劫持”。
不止运营商可以劫持, 其他的 黑客 也可以用类似的手段进行劫持, 来窃取用户隐私信息, 或者篡改内容。所以在互联网上
明文传输是比较危险的事情!!!那么
HTTPS 就是在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全。
这种前面带了锁头图标的就是https。如果前面显示“不安全”字样就代表是http。
一、对称加密
对称加密其实就是通过
同一个
"密钥
" , 把明文加密成密文, 并且也能把密文解密成明文。
对称加密里面最关键的就是这个秘钥,客户端和服务器需要先约定好这个秘钥具体是啥。如果是客服端生成了秘钥,那么就需要通过网络去告知服务器这个秘钥是什么。那么就会引入一个问题,因为秘钥本身是在网络上进行明文传输的,那么就容易被黑客获取,一旦被黑客获取了,那么后续的加密也就失去了意义。
其实对于这个问题也是有解决办法的,在很久之前的时候,可以让客户端和服务器同时生成一样的秘钥,比如很久之前去银行开通网银账户的时候,就会送你一个U盾。
但是在今天,这种方式显然已经过时了,那么正确的手段就是对这个对称秘钥也进行加密。接下来就会引入非对称加密对对称秘钥进行加密。
二、非对称加密
非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥"。一个网站,生成一对公钥和私钥,把公钥给公开出去,自己只保留私钥。
客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器。由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密钥。服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响应数据。后续客户端和服务器的通信都只用对称加密即可。
那么就会有两个问题:
一:既然都有非对称加密了,为什么还需要使用对称加密?为什么不直接用非对称秘钥进行加密就可以了?
其实使用对称加密,成本是比较低的,因为机器的资源消耗比较少,速度就很快。非对称加密,成本比对称加密高很多,机器资源消耗比较多,速度也就慢了很多。所以对于明文就用对称加密,对对称秘钥再使用非对称加密,这样就高效了很多。
二:如何保证客户端获取的公钥是真实可靠的?而不是黑客伪造的?
其实任何人都可以生成一对公钥和私钥,网站服务器能够生成,当然黑客一样能够生成,其实黑客就可以利用这一点,来一招“狸猫换太子”,这也叫“
中间人攻击”!
针对这一问题,肯定有反制的办法。通过引入证书,就可以反制黑客伪造公钥这件事了。
客户端和服务器在连接的时候,客户端就不是简单的去索要公钥了,而是直接索要一个“证书”,公钥就包含在这个证书里面。这个证书不是服务器自己生成的,而是第三方机构颁发的,客户端在拿到证书之后,就可以根据证书中所提供的信息,去第三方机构进行认证,来校验证书是否合法!如果证书合法,就可以信任其中的公钥。(服务器开发者在搭建服务器的时候,要去第三方机构进行认证,来申请证书)
三、引入证书
在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个
证书。这个证书包含了刚才的公钥, 也包含了网站的身份信息。
当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的)。
完整流程:
总结HTTPS的传输过程
HTTPS 工作过程中涉及到的密钥有三组:
第一组
(
非对称加密
): 用于校验证书是否被篡改。
第二组
(
非对称加密
): 用于协商生成对称加密的密钥。
第三组
(
对称加密
): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密。
其实一切的关键都是围绕这个对称加密的密钥。其他的机制都是辅助这个密钥工作的。
第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器。
第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥。
HTTPS传输过程总结:
1.客户端先从服务器获取到证书,证书中包含了公钥。
2.客户端对证书进行校验。
3.客户端生成一个对称秘钥,使用公钥对对称秘钥加密并发送给服务器。
4.服务器收到这个请求之后,使用私钥解密,得到对称秘钥。
5.客户端发出后续请求,后续请求都是用对称秘钥加密。
6.服务器收到的数据也是用对称秘钥进行解密。
HTTPS传输就一定能够保证安全吗?
黑客在进行中间人攻击的时候,是可以伪造一个证书的,那么浏览器就会对拿到的证书进行校验,如果校验不通过,浏览器会有错误提示:类似“该网站证书非法,继续访问存在安全风险!”的提示字样。同时浏览器上面还会有一个点击按钮“继续访问”,如果点击了“继续访问”,进入了链接,那么用户的安全就不能得到保证了!
再牛逼的技术也抵不住犯傻的用户啊!!!