购物网站推广,网络教育平台登录入口,电话网站源码,网站开发职务1. 引入
在 HTTP 协议 章节的 reference 段#xff0c;曾提到过 HTTPS。这里对HTTPS进行详细介绍。
HTTPS 是在 HTTP 的基础上#xff0c;引入了一个加密层 (SSL)。HTTP 是明文传输的 (不安全)。当下所见到的大部分网站都是 HTTPS 的。 起初是拜运营商劫持所赐#xff08;…1. 引入
在 HTTP 协议 章节的 reference 段曾提到过 HTTPS。这里对HTTPS进行详细介绍。
HTTPS 是在 HTTP 的基础上引入了一个加密层 (SSL)。HTTP 是明文传输的 (不安全)。当下所见到的大部分网站都是 HTTPS 的。 起初是拜运营商劫持所赐篡改 reference……。但是即使运营商 不劫持, 如果黑客盯上了, 也是可能会对你的信息安全造成一些影响的。举个例子黑客能否用自己的设备伪造一个 “商场 wifi” 一旦你的数据经过了黑客的设备, 又没有加密HTTP 是明文, 就非常危险了尤其是 “各种密码之类的”。 解决安全问题最核心的要点就是加密。加密的成本很低破解的成本很高。只要破解成本超出了要保护的数据价值本身就是安全的。eg造一个100元的假钞成本花了110元
密码学中的几个重要概念 明文要传输的真实的数据要表达的实际的意思。 密文针对明文加密之后得到的结果。往往是不直观的不易理解。 明文 变 密文 的过程 加密。 密文 变 明文 的过程 解密。 加密和解密的过程中涉及到一个关键道具——称为 密钥 。 对称加密 加密和解密使用的是同一个密钥。 非对称加密 加密和解密使用的是两个密钥。 这两个密钥k1, k2, 是成对的。使用 k1 来加密此时就是 k2 解密也可以使用 k2 加密此时就是 k1 解密这个特性的背后有一系列的数学原理。两个密钥就可以一个公开出去称为 “公钥”另一个自己保存好称为 “私钥”。手里只有一把的话是无法知道另一把是什么的也是有一定的数学原理的
2. HTTPS 工作过程
只要针对 HTTPS 的数据进行解密了就能够得到 HTTP 格式的数据。 上述的运营商劫持无论是修改 referer 还是修改返回的链接(body)本质上都是明文传输惹的祸。需要引入加密对上述传输的数据进行保护主要就是要针对 header 和 body 进行加密。
2.1 引入对称加密
通过对称加密的方式针对传输的数据进行加密操作。 网络上传输的内容就是密文了
对称加密的时候客户端和服务器需要使用同一个密钥。不同的客户端需要使用不同的密钥。如果所有的客户端密钥都相同加密形同虚设黑客很容易拿到密钥 这就意味着每个客户端连接到服务器的时候都需要自己生成一个随机的密钥并且把这个密钥告知服务器。不一定非得是客户端生成由服务器生成后告诉给客户端也行。 这就是问题的关键 密钥需要传输给对方的。一旦黑客拿到了这个密钥意味着加密操作就无意义了。 需要考虑针对密钥也进行密文传输但是假设使用对称加密引入 key2 针对 key 进行加密意味着就需要把 key2 地传输给服务器服务器才能解密拿到 key还是可能被黑客拿到key2然后知道 key进而得到明文。
2.2 引入非对称加密
使用非对称加密主要的目的是为了对对称密钥进行加密确保对称密钥的安全性。 不能使用非对称加密针对后续传输的各种 header body 等进行加密而是只能使用非对称加密去加密对称密钥。 非对称加密的加密解密成本消耗的 CPU 资源要远远高于对称加密。少用点可以。如果大规模使用就成本很大了。 可让服务器生成公钥 私钥私钥只具备服务器自己知道、公钥可以告诉任何人。由于公钥本身就是可以公开的不加密也无所谓此处就让服务器持有私钥只有服务器知道客户端持有公钥黑客也能知道。 客户端使用公钥对生成的对称密钥进行加密黑客虽然手里有公钥但是密文需要通过私钥才能解密。黑客无法对这个数据解密也就不能拿到 888888 对称密钥黑客监听中间的通信数据要比黑人服务器这边容易一些。如果能跟进服务器了大概率就可以直接拖数据库了用户啥信息都被拿到了。 只要 888888 安全到达服务器后续服务器和客户端之间就可以使用 888888 作为对称加密的密钥此时黑客就无法破解后续的数据了。
上述操作, 其实仍然存在严重的漏洞黑客仍然有办法破解掉其中的加密操作——中间人攻击。
服务器可以创建出一对公铀和私铀, 黑客, 也可以按照同样的方式, 创建出一对公钥和私钥 冒充自己是服务器生成公钥和私钥的算法都是开放的服务器能生成黑客也能生成。 客户端拿到pub2 之后无法区分 pub2 是否是服务器的于是客户端拿着pub2 就对 key 加密了。黑客就使用 pri2 对上述数据进行解密因此黑客就拿到了 key。黑客继续使用从服务器拿到的 pub1 重新对 key 进行加密并且传输给服务器。服务器拿到数据之后, 使用 pri1 来解密当然可以解密成功于是服务器就知道了对称密钥是 key 了。 后续的通信, 服务器和客户端之间仍然会继续使用 key 作为加密的密钥此时后续传输的各种数据就都可以被黑客解密了。
2.3 证书
针对上述中间人攻击问题如何解决 最关键的一点客户端拿到公钥的时候要能有办法验证这个公钥是否是真的而不是黑客伪造的。 这要求服务器要提供一个证书证书是一个结构化的数据(里面包含很多属性最终以字符串的形式提供)。证书中会包含一系列的信息比如服务器的主域名、公钥、证书有效期……
证书是搭建服务器的人要从第三方的公正机构进行申请的申请的时候当然要提交材料人家要审核 一个关键问题: 返回证书的时候证书数据也是经过了黑客的设备此时黑客是否能够改正书中的公钥 将公钥替换成自己的公钥呢 答不行客户端拿到证书之后会先针对证书验证真伪。
证书验证的过程 假设这是一个证书 证书: 服务器的域名: … 证书的有效时间: … 服务器的公钥: … 公证机构信息: … 证书的签名: …
颁布证书的公证机构会在发布证书的时候给这个证书计算出一个校验和。然后公证机构使用自己的私钥(如服务器的私钥无关)针对校验和进行加密此时就得到了证书的签名。
市面上的公证机构一共也没多少这些公证机构持有自己的私钥对应的公钥都包含在常见的系统中。windows 里面就内置了大量的公钥(如果没有也可以额外安装)。前面安装的 fiddler有一步操作就是安装证书(主要就是安装 fiddler 这边提供的公钥)。 此处所谓的签名本质上是一个经过加密的校验和把证书中其他的字段通过一系列的算法CRC, MD5 等得到一个较短的字符串。 校验和 如果两份证书内容一样此时校验和就是相同的如果校验和不同两份数据的内容则一定不同。(逆否命题) 客户端拿到证书之后主要做两件事
按照同样的校验和算法把证书的其他字段重新算一遍得到校验和1使用系统中内容的公证机构公钥对证书中的签名进行解密得到校验和2
此时就可以对比看这俩校验和是否一致。如果一致说明证书是没有被修改过的就是原版证书如果不一致说明证书被别人篡改过了。(比如黑客如果替换了自己的公钥此时算出来的校验和一定发生改变)此时客户端就能识别出来了。
证书主要是防止黑客篡改而不是防止黑客知道黑客的系统也内置了公证机构的公钥 黑客也能解密但是黑客无法修改证书的内容。 如果黑客直接修改 公钥不修改签名。 此时客户端验证的校验和是一定不一样的。就识别出来了。 如果黑客修改公钥也尝试重新生成签名由于黑客不知道公证机构的私钥所以黑客无法重新生成加密的签名 如果黑客拿自己的私钥加密客户端这边拿着公证机构的公钥也会解密失败。 上述操作就把黑客篡改证书的行为给堵死了。 黑客能不能自己去公证机构申请个证书然后把自己的证书替换掉服务器的证书呢 不行域名是唯一的黑客申请的证书的域名和服务器的域名肯定不相同。客户端拿到证书之后一看域名都不一样直接就知道证书是假冒的了都不用验证校验和了。
有时浏览器告诉用户访问的网站有风险请谨慎访问可能是黑客进行了中间人攻击也可能是证书过期了。 当然上述讨论的过程所谓的安全也不是绝对的安全。上述的安全本质上都是基于非对称加密体系。非对称加密体系也不是无懈可击的。只不过破解这样的加密体系需要的计算量非常大随着算力的提升尤其是量子计算机崛起算力又会大幅度提升对于现有的密码学体系就会造成重大冲击。