目录
一、什么是HTTPS
二、什么是加密/解密
三、为什么要加密
四、常见的加密方式
1.对称加密
2. 非对称加密
五、HTTPS加密方式探讨
1.只使用对称加密
2.只使用非对称加密
3.非对称加密+对称加密
4.非对称加密+对称加密+CA认证
六、总结
一、什么是HTTPS
HTTP 协议:是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。
HTTPS 协议:可以理解为HTTP+SSL/TLS, 也就是在HTTP协议的基础下加入了 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
SSL(安全套接字层):SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
TLS(传输层安全性协议):其前身安全套接字层(SSl)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。
二、什么是加密/解密
加密就是将我们能一眼看明白并且很多人都能看懂的信息进行包装,变成很难理解的一段信息,即明文变成密文过程。
解密就是将已加密后的密文信息经过一系列的变换,还原为很容易理解的明文信息。
据记载,公元前400年,古希腊人就发明了置换密码;在第二次世界大战期间,德国军方启用了“恩尼格玛”密码机,所以密码学在社会发展中有着广泛的用途。在现代加密解密已经发展成⼀个独⽴的学科:密码学。而密码学的奠基⼈,也正是计算机科学的祖师爷之⼀, 艾伦·⻨席森·图灵
三、为什么要加密
因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击。所以我们才需要对信息进行加密。
比如一个典型的"运营商劫持"案例:当我们通过非官网的途径,下载某个软件时,经常发生的就是下载完成后的软件与自己本要下载的是完全不同的两个。这是因为我们通过⽹络传输的任何的数据包都会经过运营商的⽹络设备(路由器,交换机等),那么运营商的⽹络设备就可以解析出你传输的数据内容,并进⾏篡改.点击"下载按钮",其实就是在给服务器发送了⼀个HTTP请求,获取到的HTTP响应其实就包含了该APP的下载链接.运营商劫持之后,就发现这个请求是要下载 A AA,那么就⾃动的把交给用户的响应给篡改成 BBB 的下载地址了。
四、常见的加密方式
1.对称加密
采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密
- 特征:加密和解密所⽤的密钥是相同的。
- 常⻅对称加密算法:DES、3DES、AES、TDEA、Blowfish、RC2等。
- 特点:算法公开、计算量⼩、加密速度快、加密效率⾼。
- 对称加密其实就是通过同⼀个"密钥",把明⽂加密成密⽂,并且也能把密⽂解密成明⽂.
这种方式通俗一点来讲就好比一把钥匙和一道门,门作为信息,钥匙作为密钥,加密就是通过钥匙将门上锁,解密就是用钥匙把门打开。
⼀个简单的对称加密,按位异或
假设明⽂a=1234,密钥key=8888,则加密a^key得到的密⽂b为9834。然后针对密⽂9834再次进⾏运算b^key,得到的就是原来的明⽂1234。(对于字符串的对称加密也是同理,每⼀个字符都可以表示成⼀个数字)
当然,按位异或只是最简单的对称加密,HTTPS中肯定也不能是使⽤按位异或这种方式。
2. 非对称加密
需要两个密钥来进⾏加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
- 常⻅⾮对称加密算法:RSA,DSA,ECDSA
- 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。
⾮对称加密要⽤到两个密钥,⼀个叫做"公钥",⼀个叫做"私钥"。公钥和私钥是配对的,最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多。
使用方法:通过公钥对明⽂加密,变成密⽂,通过私钥对密⽂解密,变成明⽂。也可以反着⽤通过私钥对明⽂加密,变成密⽂通过公钥对密⽂解密,变成明⽂。
这种加密方式就好比一把锁、一把钥匙、一道门,其中门作为信息,锁作为公钥,钥匙作为密钥,锁是公开的,任何人都可以拿着这把锁把门锁上(加密),但是要把门打开,就只有使用这唯一的钥匙(解密)。
五、HTTPS加密方式探讨
1.只使用对称加密
如果通信双⽅都各自持有同⼀个密钥X,且没有别⼈知道,这两⽅的通信安全当然是可以被保证的(除非密钥被破解)。
但是在网络中,服务器与客户端需要建立连接之后才能进行通信,在首次建立连接时,怎样才能让双方都知道密钥,而又不能让其他人知道呢?
如果是服务器给客户端明文发送密钥,那么肯定很容易被劫持,但将密钥加密发送客户端肯定又看不懂。
如果统一规定服务器与客户端使用同一密钥,但是服务器与客户端的连接并不是一对一的,而是一对多的,那么这样密钥太扩散了,很容易就被黑客拿到了。
所以但使用对称加密是肯定不行。
2.只使用非对称加密
对于非对称加密,在服务器与客户端通信双方首次建立连接时,双方可以彼此交换自己的公钥,连接建立后,在给对方发送信息时,就可以使用对方的公钥进行加密,而要解密也只能对方使用自己私钥才能进行解密。
如上方法看似很完美,但是要知道黑客的技术也是很厉害的。比如在客户端与服务器进行连接时,黑客将客户端发送给服务器的公钥C进行劫持,然后黑客把自己的公钥P发送给服务器,那么在后续服务器与客户端进行信息发送的过程中,服务器对信息进行加密的公钥不是客户端的,而是黑客的公钥P,那么服务器所发送的所有信息,黑客都可以通过自己的私钥P*进行解密查看,然后黑客再使用客户端公钥C再对信息进行加密发送给客户端,此时客户端也就能使用自己的私钥C*进行解密查看,再整个过程中客户端几乎是察觉不到信息发生了泄露。
又或是服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传送,这条数据的安全似乎可以保障了!因为只有服务器有相应的私钥能解开公钥加密的数据。然而反过来由服务器到浏览器的这条路怎么保障安全?如果服务器用它的私钥加密数据传给浏览器,那么浏览器用公钥可以解密它,而这个公钥是一开始通过明文传输给浏览器的,若这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息了。
所以只使用非对称加密也不安全
3.非对称加密+对称加密
原理
客户端发起https请求,获取服务端公钥S,客户端在本地⽣成对称密钥C,通过公钥S加密,发送给服务器。由于中间的网络设备没有私钥,即使截获了数据,也⽆法还原出内部的原⽂,也就⽆法获取到对称密钥。服务器通过私钥S*解密,还原出客⼾端发送的对称密钥C。并且使⽤这个对称密钥加密给客户端返回的响应数据。
漏洞
该方式也只能再服务器与客户端握手连接成功后才能保证信息的安全,如果黑客再服务器与客户端握手时进行劫持,那么就会出现与只使用非对称加密方式一样的漏洞。在服务器与发送公钥S给客户端时,黑客将公钥S替换为自己的公钥P,那么客户端接受公钥P后,再以此公钥加密对称密钥M给服务器时,黑客就能截获此密钥。所以再后续的信息传送的过程中,该密钥M已不能保证信息的安全了。
这种黑客攻击的方式也称为“中间人攻击(MITM)”。
4.非对称加密+对称加密+CA认证
在探讨该方式前需要先几个概念:
a.数据摘要
- 数据摘要(数字指纹):其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。
- 摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)
- 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常⽤来进⾏数据对⽐
b.数字签名
- 摘要经过加密后就得到数字签名
CA认证
服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端公钥的权威性。CA认证也就是相当于第三方,为我们提供一个辅助验证的功能。
当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专⻔为该⽹站形成数字签名,过程如下:
1. CA机构拥有⾮对称加密的私钥A和公钥A'
2. CA机构对服务端申请的证书明⽂数据进⾏hash,形成数据摘要
3. 然后对数据摘要⽤CA私钥A'加密,得到数字签名S
服务端申请的证书明⽂和数字签名S共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了。
加密原理
服务器需要先向CA机构申领一份数字证书,在客户端和服务器刚⼀建⽴连接的时候,服务器给客户端返回⼀个证书,证书包含了之前服务端的公钥,也包含了网站的身份信息。
当客户端获取到这个证书之后,会对证书进⾏校验(防止证书是伪造的)。
- 判定证书的有效期是否过期
- 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
- 验证证书是否被篡改:从系统中拿到该CA机构的公钥,对签名解密,得到⼀个hash值(称为数据摘要),设为hash1.然后计算整个证书的hash值,设为hash2.对⽐hash1和hash2是否相等.如果相等,则说明证书是没有被篡改过的。
只有当客户端验证该证书不是伪造的后,客户端再使用证书上的公钥对对称密钥进行加密,然后再发送给服务器,服务器再用自己的私钥进行解密,就得到了对称密钥,后续服务器与客户端就使用该对称密钥进行通信。
解答你的几个疑问:
1.中间⼈有没有可能篡改该证书?
答:中间⼈即使篡改了证书的明⽂,由于他没有CA机构的私钥,所以⽆法hash之后⽤私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名如果强⾏篡改,客⼾端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从⽽终⽌向服务器传输信息,防⽌信息泄露给中间⼈。
2.中间⼈可能整个掉包证书吗?答:因为中间⼈没有CA私钥,所以⽆法制作假的证书,所以中间⼈只能向CA申请真证书,然后⽤⾃⼰申请的证书进⾏掉包这个确实能做到证书的整体掉包,但是别忘记,证书明⽂中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。永远记住:中间⼈没有CA私钥,所以对任何证书都⽆法进⾏合法修改,包括⾃⼰的。
六、总结
对称加密虽然性能好但是有密钥泄漏的风险,非对称加密(2组公钥+2私钥双向传输)安全但性能低下,因此考虑用非对称加密来传输对称加密所需的密钥,然后进行对称加密,但是为了防止非对称过程产生的中间人攻击,我们就引入第三方辅助认证,需要对服务器公钥和服务器身份进行配对的数字认证,CA认证+非对称加密+对称加密的方式。