目录
一,认识HTTPS
在HTTP中,在发起请求或者响应的时候,我们的报头的cookie信息会被明文的显示出来。所以这就会导致不安全。导致隐私的泄露。所以HTTPS协议便应运而生。如下便是HTTPS协议的图示:
HTTPS协议其实就是在HTTP协议的条件之下再加上一个加密解密层。
二,加密方式
1,对称式加密
对称加密的实现是通过产生一个密钥来对客户端要发出去的报文进行加密的方式,然后在服务端接收到了报文以后便通过相同的密钥来对这段报文进行解密,进而得到这一段报文。
特点:加密算法简单,加密速度快,加密效率高。
2,非对称式的加密
非对称式的加密方式是通过产生两个密钥的方式来实现的。这两个密钥中,一个叫做私钥,一个叫做公钥。公钥是公开的,大家都能获取得到。私钥是私密的,只有我自己有。当我们使用公钥来对报文进行加密时,只有拥有私钥的人才能解密。当使用私钥来对报文进行加密是大家都能进行解密。
特点:加密算法复杂,加密速度慢。
3,数据指纹(数据摘要)
数据指纹(摘要)是一种通过哈希散列的方式将某段报文变成相应的字符串的过程。因为使用了特定的哈希方法,所以当报文被修改时这段字符串也会发生变化。
数据指纹(摘要)不是严格意义上的加密方法,但是因为使用了哈希的方式处理字符串从而让字符串的内容很难被反推得到。从而可以用来比对我得到的内容是否被修改过,也可以用来实现网盘当中的秒传功能或者是数据库中的密码管理。
网盘秒传功能
当我们要将某个资源放到网盘上面时,通常我们的资源中的某一段内容会被网盘服务端抽取出来。然后这段资源便会被哈希加密得到一段字符串。然后,网盘服务器会去相应的库里面查询是否由相同的资源,如果有便不会在将相同的资源上传到服务器,而是会在你的用户空间下建立软连接指向对应的已有的资源。
4,数据签名
数据签名其实就是在数据指纹(摘要)基础上再进行一次加密。进而让数据摘要也让别人看不到。
三,HTTPS的工作原理
再数据传输的过程中,要解决的问题有两个:
1,传输的数据被监听。
2,传输的数据被篡改。
实现方式
1,对称式加密
再客户端和服务端进行通信时,我在客户端进行对称式加密。这样,便可以将加密后的报文发给服务端了。但是,这样做的问题是加密后的报文我的服务端也解析不了,不知道是什么意思。所以,客户端就要将密钥一并打包发给服务端,让服务端拥有能够解密报文的能力。
如果发生中间劫持怎么办?
但是,上面的方式其实还是有问题的。因为我们的数据不是直接发送给服务端的,而是要经过第三方才能将数据发送到服务端。
如果其中的第三方是一个黑客,那我们的的数据就暴露无遗了。因为黑客也拿到了密钥,他便能随意的解开我们的数据。这就是发生了中间劫持。所以,对称式加密是不安全的。
2,非对称式加密
非对称式加密的实现,有两种方式:
1,客户端和服务端都非对称式加密
客户端和服务端都对数据进行加密,此时客户端便会形成两把密钥:C (公钥) C'(私钥)
服务端也会形成两把密钥:S(公钥) S'(私钥)。然后服务端和客户端再收发数据时便将公钥发给对方来实现加密功能,而私钥自己保存用于解密。
第一步:生成密钥,交换密钥
第二步:使用对方的密钥来对数据进行加密
这样便能对数据进行加密且不会发生出现在第一种加密方式下的问题。
但是,太慢怎么办?
前面已经提到过了,非对称式加密的算法都是比较复杂的,所以加密会很慢。所以,为了解提升效率,我们可以让服务器和客户端两端一个做非对称加密,一个做对称加密。
第一步:服务端形成非对称密钥 客户端形成对称密钥
第二步:客户端再对服务端发起请求得到密钥S
第三步:客户端使用S对C进行加密发送到服务端,服务端再用私钥S'来对加密后的C进行解密进而得到C
这样便能实现报文传输时的加密和解密功能。
如果发生掉包怎么办?
还是和上一个问题一样,客户端的数据不是直接到达服务端的,服务端的数据也不是直接到达客户端的。还是要经过中间人,如果按照上面的方式传输其实还是会发生问题的。比如中间人掉包。
中间人加入:
中间人生成非对称密钥:
客户端向服务端请求得到密钥S,但是中间人将密钥掉包:
如果发生上面的情况,那我们的数据便不会是安全的了。因为C会使用M加密,M加密后会被M'解开,进而中间人会得到C。然后中间人再用S来对C加密转给服务端,这样便能神不知鬼不觉的监听客户端和服务端间传输的数据。
数字证书
1.什么是数字证书
服务端在使用HTTPS协议在使用前,需要向CA机构申请一份证书。这份证书便是一个数字证书。
在服务端申请CA证书之前,服务端得先形成自己的公钥和私钥。然后,在特定的平台下将服务器的信息和公钥提交给CA机构。服务器端提交的信息便是明文信息+公钥。然后CA机构先对数据使用特定的哈希算法来形成数据摘要(数据指纹),然后CA机构用自己的密钥对数据摘要进行加密形成数据签名 。再将明文+数据签名打包形成CA证书发给服务端。
所以,当客户端申请服务端的公钥时。服务器便会将CA证书发给客户端,让客户端得到一个没有被修改后的公钥。
中间人能不能替换掉数据签名?
答案是不能,因为只有CA机构才有这段签名的私钥。如果中间人改了这段数据,客户端便会不认识。
中间人能不能替换掉整个证书?
答案是可以的,但是在比对的过程当中客户端还是会发现一些不同并警告用户。
所以,HTTPS协议采用的加密方式便是:对称加密+非对称加密+CA证书
但还是要说一句,世界上没有不透风的墙。这个世界上也没有不能被攻破的加密方式,但是只要攻破这个加密方式的成本远高于加密的成本,那我们便可以说这个加密方式是安全的。