【计算机网络】HTTPS协议详解
文章目录HTTPS 是什么什么是“加密”HTTPS 的工作过程引入对称加密引入非对称加密引入证书机制完整流程1. HTTPS是什么HTTPS是一种应用层协议是一种透过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信但是在HTTP的基础上引入了一个加密层使用SSL/TLS来加密数据包。HTTPS开发的主要目的是提供对网站服务器的身份认证保护交换数据的隐私与完整性。HTTPS默认工作在TCP协议443端口2. 什么是“加密”加密相关术语明文要传输的原始的信息密文通过一定的规则将明文变换后的内容加密将明文变成密文解密将密文变成明文密钥在加密和解密的过程中往往需要一个或多个中间的数据来辅助该过程这样的数据称为密钥为什么需要HTTPS为什么需要加密前几年有一个运营商劫持事件由于我们通过网络传输的任何数据都会经过运营商的网络设备路由器、交换机等那么运营商的网络设备就可以解析出我们传输的数据内容并进行篡改。比如你要在下某个软件当你点击下载时其实就是在给服务器发送一个 HTTP 请求获取到的 HTTP 响应本应该包含该软件的下载链接但是经过运营商劫持后就可以将这个响应给篡改成其它软件的下载链接使得篡改者可以获取非法的利益。上述的例子不止运营商可以劫持一些黑客或非法人员都可以通过这种手段来窃取用户隐私或者篡改内容。故 HTTPS 的出现使用密文传输进一步的保证了用户的信息安全3. HTTPS的工作过程既然要保证数据安全就需要进行“加密”即网络传输中不再直接传输明文而是加密之后的“密文”。加密的方式有很多但是整体可以分为两大类对称加密和非对称加密3.1引入对称加密基本介绍对称加密其实就是只通过一个密钥把明文加密成密文并且也能把密文解密成明文如使用异或操作就可以实现一个简单的对称加密。 设明文为 1234密钥为 8888。通过明文和密钥异或操作实现加密 1234 ^ 8888得到密文为 9834。 然后通过密文和密钥异或操作解密 9834 ^ 8888得到明文 1234只引入对称加密存在的问题通过对称加密貌似就可以进行数据的保护了。黑客就算入侵了路由器也只能得到请求的密文内容但是上述方案有一个问题就是密钥如何进行约定毕竟一个服务器对应着很多的客户端每个客户端和服务器之间都需要约定一个独自的密钥。可如果让服务器管理所有的密钥其实并不简单因此更好的做法就是客户端连接过来时就自带一个客户端生成好的密钥。当每个客户端在连接之前自己先生成一个密钥通过网络将该信息告诉服务器服务器将这个密钥保存即可。也正是因为如此黑客在获取密文请求的同时也获取到了密钥因此只使用对称加密并不能起到数据保护的作用。所以还需要让密钥进行加密但是使用对称加密的话是行不通的故引入了非对称加密3.2 引入非对称加密基本介绍非对称加密要额外再用到两个密钥一个叫做“公钥”一个叫做”私钥“。公钥和私钥是配对的这对密钥由服务器产生。缺点运算速度非常慢比对称加密慢很多引入流程服务器将公钥直接发送给客户端将私钥保留。客户端得到公钥后通过公钥将密钥进行加密再发送给服务器服务器通过私钥解密获取到密钥。之后再将收到密钥的消息通过密钥加密后发送给客户端客户端收到后就使用该密钥通过对称加密的方式与客户端进行数据传输引入非对称加密后为什么还要使用对称加密由于对称加密的成本对机器资源的消耗远远低于非对称加密而实际上客户端和服务器之间传输的数据量会很大如果都使用非对称加密整体的传输速度就会很慢因此通过非对称加密让服务器得到密钥后再使用对称加密进行传输能够提高传输的效率引入非对称加密后还存在的问题服务器首先生成一对公钥A和私钥A。首先服务器要把公钥A发送给客户端此时黑客可以当作一个中间人自己生成一对公钥B和私钥B。他会将服务器的信息阶段并将自己生成的公钥B发送给客户端。当客户端得到公钥B后就使用公钥B加密自己生成的密钥A并发送给服务器。此时黑客再次截取通过私钥B解密公钥B得到密钥A并使用公钥A将密钥进行加密返回给服务器。至此服务器和客户端都确定了密钥A但黑客也神不知鬼不觉的知道了密钥A。故在之后的数据传输中黑客就可以直接完全的获取客户端和服务器的明文数据。因此即使引入了非对称机密还是存在两个问题客户端如何获取公钥客户端如何确定这个公钥是不是黑客伪造的为了解决这个问题就引入了证书3.3 引入证书机制基本介绍在客户端和服务器刚建立连接时服务器就给客户端返回一个证书。这个证书就好比人的身份证用来作为网站的身份标识。而每搭建一个 HTTPS 网址时都需要在 CA 机构申请一个证书。证书含有的重要信息证书发布机构证书有效期公钥证书所有者签名引入证书流程服务器首先产生一对公钥和私钥在第三方公证机构申请一个证书时该证书内就包含了公钥的信息然后服务器就会将公钥发送给客户端由于证书的校验很严格因此黑客就算获取了也很难伪造一个假的证书。即使伪造了客户端也可以拿到第三方公证机构去校验因此客户端就能够拿到服务器发送的公钥之后再通过公钥加密自己产生的密钥发送给服务器。由于黑客没有私钥就算截获了该请求也不能拿到密钥因此服务器就能顺利的得到加密的密钥并使用私钥来解密。最终就能够很好的防止黑客获取或篡改数据。校验证书方式判定证书的有效期是否过期判定证书的发布机构是否受信任判定证书是否被篡改从系统中拿到该证书发布机构的公钥对签名解密得到一个 hash 值称为数据摘要设为 hash1。然后计算整个证书的 hash 值设为 hash2。对比 hash1 和 hash2 是否相等如果相等则说明证书是没有被篡改过的理解数据值摘要和签名针对一段数据可以通过一些特定的算法对这个数据生成一个签名。由于不同的数据生成的签名差别很大因此就可以使用签名在一定程度上区分不同的数据。常见的生成签名的算法有MD5 和 SHA以下以 MD5 为例介绍其特点定长无论多长的字符串计算出来的 MD5 值都是固定长度16字节版本或者32字节版本分散源字符串只要改变一点点最终得到的 MD5 值都会差别很大不可逆通过源字符串生成 MD5 很容易但是通过 MD5 还原成原串理论上是不可能的由于 MD5 这样的特性因此可以认为如果两段数据的 MD5 值相同则这两段数据相同3.4完整流程对称加密需要有一个客户端生成的对称密钥用于对传输的数据进行加密但需要将该对称密钥告知给服务器非对称加密服务器提供一个公钥自己持有私钥将公钥传发送给客户端客户端使用公钥对对称密钥进行加密将密文传送给服务器引入证书机制通过第三方公证机构向网站颁发证书该证书里面就含有公钥。客户端向服务器请求的也就是证书客户端拿到证书后去公证机构校验如果证书合法就使用里面的公钥对对称密钥进行加密