首页 > 编程知识 正文

https工作原理,https加密原理

时间:2023-05-06 14:35:16 阅读:233071 作者:4712

HTTPS原理介绍   下面的原理介绍,主要用于帮助理解https,虽然下面的流程应该比较接近https的样子了,但要注意,并不是说https就完全是这样做的。   要认识HTTPS,就需要先了解一下密码体制: RSA密码体制:是一种公钥密码体制,公钥公开,私钥保密,它的加密解密算法是公开的。 由公钥加密的内容可以并且只能由私钥进行解密,并且由私钥加密的内容可以并且只能由公钥进行解密。也就是说,RSA的这一对公钥、私钥都可以用来加密和解密,并且一方加密的内容可以由并且只能由对方进行解密。加密使用的密钥和解密使用的密钥是不相同的,是一种非对称加密算法。 对称加密算法:加密和解密都是使用的同一个密钥。           HTTPS简单讲呢就是利用RSA密码体制,网站自己拿着私钥,给客户端公钥。客户端要请求服务器时,用公钥加密数据,服务器收到数据后用私钥解密,因为只有私钥可以解密公钥加密的数据,所以服务器只要保护好了私钥,就不用担心客户端发来的信息被别人看到啦。然后服务器用私钥加密要返回给客户端的数据,将加密的数据发送给客户端,客户端再用公钥解密服务器返回的数据。          看完上面的流程不难发现,这里面存在一个很明显的问题:因为公钥是网站公开的,任何人都能获得到,那么服务器返回给客户端的数据,岂不是任何人都能解密,那加不加密还有什么意义呢。事实也确实是这样,所以https并不只是上面描述的流程,而是还会配合使用对称加密算法,客户端会用服务器给的公钥加密一个对称加密算法和密钥,然后告诉服务器,以后我们俩用这个算法和密钥通信,不再使用你网站的公钥私钥,因为加密算法和密钥是用公钥加密过的,只有拥有对应私钥的服务器能解出来。这样这个对称加密算法和密钥就只有服务器和客户端知道,以后的数据使用只有他们俩个知道的对称加密算法加密,也就不担心数据被第三方截获了。   所以,https是利用这两种加密算法,确保传输内容的保密性,还利用一些其他手段,保证公钥的可信性,传输内容的完整性。 --内容完整、可靠       使用了加密,可以保证数据的保密性,但是并不能保证数据的可靠性,有些黑客,虽然无法直接修改传输的明文,但是却可以随意修改密文,导致解密后的信息被改变       为了确保传输内容中途没有被修改过。这里就用了一个概念 “数字签名”。       签名就是在传输信息的后面再加上一段内容,可以证明信息没有被修改过,怎么样可以达到这个效果呢?一般是对信息做一个hash计算得到一个hash值。在把信息发送出去时,把这个hash值加密后做为一个签名和信息一起发出去。 接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后的)进行对比,如果一致,就说明信息的内容没有被修改过。   --公钥的可信性       即使我们使用的各种加密手段保护我们的数据,但是我们仍不能保证是不是有人在冒充服务器,假的服务器,完全可以给客户端一份假的公钥(因为任何人都可以制作自己的公钥私钥),然后冒充真的服务器与客户端通信。       如果随便来一个公钥,浏览器就直接使用,那https加密的数据也很可能被人窃取。所以又来了一个概念“数字证书”       如何保证公钥的可信,就有了CA(证书颁发机构),由他们颁发数字证书,公钥的信息都在证书里,服务器直接将证书给浏览器即可,浏览器认证证书的有效性,再与服务器通信。   参考链接: https://www.cnblogs.com/xuaidongstdudyrecording/p/6296262.html   https://www.cnblogs.com/shijingjing07/p/5965792.html  https://www.zhihu.com/question/25334635  https://studygolang.com/articles/2946        HTTPS服务搭建   下面就来试着搭建一下使用咱们自己制作的证书的HTTPS服务器   制作私钥   制作证书

 

使用自己制作的证书,启动https服务,192.168.201.8:8080 go直接提供了https服务启动接口,传入证书与私钥即可   通过浏览器访问一下API接口。 显然,咱们自己制作的证书,是不被浏览器认可的,被认为是无效的证书(不过无效的证书也是证书、也是可以加密数据的)  

 

浏览器页面也会提示,这可能不是一个私密连接(就是因为证书不是受信机构颁发的)

 

不用理他,点击继续,还是可以成功访问到数据的。看下我们的证书,自己做的证书确实还是挺不正规的、     

 

wireshark 抓取一下上面交互的报文。报文没问题,数据也是加密过的,符合我们数据加密的要求。  

 

  HTTPS代理原理分析   下面我们来看一下HTTPS使用代理的情况,分析下代理是如何做的,主要还是为了帮助进一步的理解数字证书。   首先,我们来看一个受信证书的例子,随便访问一个HTTPS的站点,颁发者是被信任的机构  

 

然后,我们启用代理  

 

修改浏览器设置

 

再次访问网页,发现证书已经被代理篡改,颁发者变成了PortSwigger CA,显然这不是一个受信任的证书颁发机构, 浏览器提示我们,这不是一个安全的访问(和刚才访问咱们自己的网站的提示一样有木有,所以说,不论中间有没有代理,只要证书不受信,都会被浏览器认为是不安全的)  

 

继续访问,在代理端可以看到解密后的明文, 所以如果是访问网站,使用不受信任的机构颁发的证书其实还是很有风险的,有可能你与浏览器交互的信息已经被第三方窃取到了。  

 

根据上面的现象,应该基本能猜测到,代理是给浏览器发送了自己制作的证书,在接收到浏览器的请求后,用自己的私钥解密出明文,再用微步在线给的证书加密明文,伪装浏览器与微步在线交互,从而实现了能解密出HTTPS的明文的效果。 当然这也跟我们功能的实现没有太大联系,只能说明使用不受信的证书的危险性。

转载于:https://www.cnblogs.com/satuer/p/9357371.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。