HTTP、HTTPS在我们的日常开发中经常接触。
在典型的安卓APP开发中,众所周知在请求API网络接口时很多人使用HTTP协议; 使用浏览器打开网页也是利用HTTP协议。 看来HTTP真的被广泛使用了呢。 但是,HTTP不安全。 使用网络清理工具,可以了解正在传输的内容,并查看列表。 例如,我经常使用Fiddler抓住包,收集有趣的API界面。
那么,如何确保HTTP的安全性呢? 几乎所有人都在脱口而出。 使用HTTPS协议。 99.9%的人知道HTTPS会加密传输的内容,但接下来询问具体的加密过程和步骤,很多人会变得哑口无言。
为了防止这种尴尬的情况,今天请仔细看看这个内容。 以后你可以强迫我,哈哈!
实体
加密类型
从科普角度看,加密算法的类型基本分为两种:
对称加密,代表性的是AES加密算法;
不对称加密,常用的RSA加密算法是不对称加密;
对称加密是指双方都有共同的密钥,用该密钥完成加密和解密。 这种加密方式速度很快,但比不对称加密更安全。
例如,我现在正在学习tmdct。 这里有数学题的答案。 123。 他想把答案告诉一直暗恋着的swdds。 所以,他们双方在考试开始前,约定了456这个钥匙。 那么,tmdct将回答内容设为密钥加密,即123 456=579,并将579写在小笔记中并扔给swdds。 这个时候,别人捡到一个小纸条,不知道他们是加密传输的,就看上面的579,误以为答案是579; swdds捡到的情况下,她取出密钥解密,用579 - 456=123得到正确的答案。
这被称为对称加密,加密和解密效率高,速度快,但如果双方任何一方不小心泄露了密钥,任何人都可以知道传输内容。
在介绍对称加密之后,让我们看看什么是非对称加密。
不对称加密是指有两个密钥、公钥和私钥。 秘钥自己藏着,不告诉任何人; 公钥可以向他人公开。
经过上次的篡改,swdds发现对称加密如果密钥泄露了就太可怕了。 所以她和tmdct决定使用不对称加密。 swdds生成公钥和私钥对,公开公钥后,tmdct得到公钥。 tmdct获得公钥后,将答案用公钥加密传输给swdds,swdds用自己的私钥解密,得到答案结果。 在此过程中,如果其他人获得了传输的内容,则无法解密,因为他们只有swdds公钥。 因此,也得不到答案。 只有swdds才能解密。
因此,非对称密码与对称密码相比安全性高,但加密和解密所需时间长,速度慢。
对称加密和不对称加密的具体应用还很清楚。 因为所属的公司在进行金融支付,所以加密和解密基本上每天都见面。
HTTPS
加密类型结束后,看看HTTPS。
我们先来看看公式:
HTTPS=HTTP SSL
从这个公式可以看出,HTTPS和HTTP不如SSL。 因此,可以推测HTTPS的加密是在SSL中进行的。
所以我们的目的是知道我们在SSL上做了什么吗?
这从CA证书开始。 CA证书其实是数字证书,是CA机构颁发的。 关于CA机构的权威性,当然所有人都信任它。 CA证书通常包括:
的发行机构,版本
证书用户
证书的公钥
证书有效期
证书的数字签名散列值和签名散列算法
.
正好说说客户端如何验证CA证书的步骤吧。
CA证书的哈希值实际上是用证书的密钥加密的值(证书的密钥在CA证书中没有)。 然后,客户端在得到证书后,用证书的公钥对其散列值进行解密,得到散列- a,然后用证书内的签名散列算法生成散列- b。 最后比较混列- a和混列- b两个值。 如果等于,则证明证书正确;如果服务端不可信,则该证书可能是错误的,并且可能已被篡改,浏览器会提示您,无法建立HTTPS连接。 此外,还将检查CA证书的有效时间和域名是否匹配等。
现在,我们将详细介绍在HTTPS中建立SSL握手的过程,假设您有客户端a和服务器b。
首先,客户端a访问服务器b。 例如,在浏览器中打开网页https://www.baidu.com。 此时,浏览器为客户端a,百度的服务器为服务器b。 此时,客户端a生成随机数1,并将随机数1、自己支持的SSL版本号、加密算法等信息传递给服务器b。
服务器b知道这些信息后,检查这两种加密算法,服务端也生成随机数b,并将随机数b和CA颁发给自己的证书一起返回给客户端a。
客户端a得到c
A 证书后,会去校验该 CA 证书的有效性,校验方法在上面已经说过了。校验通过后,客户端生成一个随机数3 ,然后用证书中的公钥加密随机数3 并传输给服务端 B 。服务端 B 得到加密后的随机数3,然后利用私钥进行解密,得到真正的随机数3。
最后,客户端 A 和服务端 B 都有随机数1、随机数2、随机数3,然后双方利用这三个随机数生成一个对话密钥。之后传输内容就是利用对话密钥来进行加解密了。这时就是利用了对称加密,一般用的都是 AES 算法。
客户端 A 通知服务端 B ,指明后面的通讯用对话密钥来完成,同时通知服务器 B 客户端 A 的握手过程结束。
服务端 B 通知客户端 A,指明后面的通讯用对话密钥来完成,同时通知客户端 A 服务器 B 的握手过程结束。
SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户端 A 和服务器 B 开始使用相同的对话密钥进行数据通讯。
到此,SSL 握手过程就讲完了。可能上面的流程太过于复杂,我们简单地来讲:
客户端和服务端建立 SSL 握手,客户端通过 CA 证书来确认服务端的身份;
互相传递三个随机数,之后通过这随机数来生成一个密钥;
互相确认密钥,然后握手结束;
数据通讯开始,都使用同一个对话密钥来加解密;
我们可以发现,在 HTTPS 加密原理的过程中把对称加密和非对称加密都利用了起来。即利用了非对称加密安全性高的特点,又利用了对称加密速度快,效率高的好处。