数据加密传输
HTTP
HTTP不对传输的报文进行加密,信息有被窃取的风险
加入对称加密
客户端和服务器先选用一致的对称加密的算法和密钥,后续的传输数据该算法和密钥进行加密。由于密钥的传输过程并没有加密,密钥有被窃取的风险
加入非对称加密
为了降低上一步对称加密密钥被窃取的风险,在密钥的传输过程使用非对称加密。由于服务器的公钥传输给客户端后,客户端无法对公钥的真实性进行验证,有发生中间人攻击的风险,黑客发送自己的公钥给客户端,取代服务器与客户端进行通信
加入数字证书
为了使得上一步客户端可以验证公钥的真实性,服务器不直接传输公钥到客户端,而是改为传输数字证书。数字证书由证书颁发机构(CA)颁发,数字证书中除了包含之前要传输的公钥外,还有经过上级证书私钥签名的摘要信息,该摘要信息用于验证证书内容是否被篡改。同时,数字证书里面还附带域名、有效期等信息,客户端可以根据这些附带信息进一步检查其合法性
TLS协议
HTTPS可以简单看成HTTP + TLS,HTTP协议运行在TLS协议之上,在发送应用程序的HTTP报文之前,先进行TLS握手。TLS握手是客户端与服务器传输数字证书,协商加密算法和对称加密密钥的真实实现
数字证书
向CA申请数字证书
流程如下图所示
CA验证csr文件的公钥public是否被篡改的过程
- 使用公钥public解密private签名的public摘要信息,得到未加密的public摘要信息
- 再次计算public的摘要信息,与上一步得到的摘要信息进行对比,对比结果相等则通过验证
常用的CA验证域名控制权的要求有
- 在特定位置提供具有特定内容的HTTP资源
- 提供具有特定内容的DNS记录
数字证书一般以.crt
或.pem
作为后缀名。完整的数字证书包含完整的证书链内容,也就是说不仅包含当前证书的内容,而且包含所有上级证书(直到根证书)的信息,常用的文件名为fullchain.pem
客户端验证数字证书
客户端验证数字证书合法性的过程
- 验证公钥是否被篡改
- 先假设直接上级证书是合法的,使用直接上级证书的公钥解密“上级证书签名的public摘要信息”,得到未加密的public
- 再次计算public的摘要信息,与上一步得到的摘要信息进行对比,未篡改的情况下对比结果应为相等
- 重复上面两步,逐一验证上级证书的合法性,除了根证书。根证书一般由操作系统或浏览器自带,CA、操作系统、浏览器厂商共同确保根证书的合法性
- 检查数字证书的有效期
- 检查数字证书的撤回状态
总体来说,各证书和合法性都由其直接上级证书保证,核心在于证书颁发机构的私钥的保密性
算法
常用的非对称加密算法有RSA,常用的对称加密算法有AES、3DES,常用的信息摘要算法有SHA-256、SHA-1、MD5
参考文档
PREVIOUSLock-Free编程