HTTPS的原理浅析与本地开发实践
作者:陈超(揽辰)
出品:大淘宝技术
日常的开发过程中本地环境保持登录状态是前置条件,在校园B端业务模块的日常研发过程中,一般先通过预发环境登录,将登录态保存在taobao.com的domain下,然后在本地通过Vite/Webpack Server + Nginx + host的方式构造自定义域名(一级域名与登录态的domain一致),进而做下一步的开发工作。但是目前预发/生产的域名都是https协议,本地自定义的域名默认协议是http。因此,为了读取登录态信息,需要将本地的访问地址也配置成https协议。实现的过程主要是在本地通过OpenSSL工具按照x509证书标准生成自签证书,并将这个自签证书添加 到电脑的证书配置项中即可(具体操作过程可以关注明天的推送)。这个配置过程引起了我对数字证书与HTTPS协 议关系的好奇,因此做了下面的原理探究,下面就对这个探究的过程就一下记录,浅析HTTPS的实现原理,并将两 种配置证书的方式的具体操作步骤做了记录。
关键词
加密算法、数字签名、秘钥交换、Wireshark、OpenSSL
引言
首先就需要抛出一个问题,为什么HTTP协议的网址越来越少?我们可以通过下面这个典型的HTTP数据传输流程 看出它的问题 —— 即数据在Client/Server之间不加识别的明文传输。
明文传输和匿名发送对象也体现了互联网信息不可靠的典型特性:
- 篡改数据(伪造) —— 破坏数据一致性;
- 嗅探(偷窥) —— 破坏数据的安全性;
问题解法
—— 如果想解决http的这两个问题,我们需要如何改良它?
方案一:通过对称加密的方式传输数据
场景一:客户端与服务端交互,通过约定的对称秘钥加密传输数据,在前端资源加载时,仍然可以从数据中找出想要的秘钥;
场景二:客户端/服务端交互如果临时生成随机秘钥,在传输过程中仍然有被截获的风险;
问题:秘钥在网络中传输容易被拦截,假设秘钥泄露,密文全会被破解且无法确定发送方是否安全;
方案二:通过非对称加密的方式传输数据
场景:服务端产生秘钥对,公钥交给客户端,私钥自己保存,不会在互联网传输,安全性更高; 问题:
- 由于公钥是公开的,中间人可以篡改上行或者下行内容。该方案能解决上行数据安全性(密文传输,无法破解) 问题,但是无法解决下行数据的安全性问题(公开的公钥可以解密服务端返回的密文)。此外,数据一致性问题业务法保证,因为中间人可以假借公钥加密自己的数据给服务端,可以修改上行数据,或者中间人告知客户端的公钥为自己的秘钥对,进行修改下行数据。
- 非对称加密的效率偏低,不适合用于数据传输;
方案三:先客户端/服务端间通过非对称加密协商秘钥,然后用协商的秘钥 做后续的数据传输
场景:先客户端/服务端双方通过约定的某种秘钥协商算法在客户端计算出秘钥K,并通过公钥加密K传输给服务端,服务端通过私钥解密后,开始基于秘钥K做数据的对称加密传输。
问题:
- 固定的秘钥对和网络中传输的秘钥存在被窃取的可能,安全性并不牢固;
- 客户端/服务端在数据传输前没有做合法性校验,无法避免中间人攻击;
带你读《2022技术人的百宝黑皮书》——HTTPS的原理浅析与本地开发实践(2)https://developer.aliyun.com/article/1340629?groupCode=taobaotech