目录
-
对称加密算法
-
非对称加密算法
-
非对称加密和对称加密组合使用
-
数字签名(指纹)
-
数字证书链
对称加密算法和非对称加密算法
对称加密算法
对称加密算法指通过一个密钥同时用作加密和解密。
secret = encrypt(key, msg) // 加密得到密文
msg = encrypt(secret,key) // 解密得到原文
图示:
使用对称加密的风险在于,如果密钥用于传输,则可能会造成泄露,如果被第三方拦截,则通过密钥可以直接解密密文得到原文,造成数据泄露。
非对称加密算法
非对称加密是通过一对公钥和私钥进行加密,公钥是完全公开的,私钥是完全保密的,公钥可以解密私钥加密的数据,私钥可以解密公钥加密的数据。
图示:
如果使用这种加密方式,服务器如果要给浏览器发送数据只能使用私钥加密,浏览器使用公钥解密,这一步是存在风险的,服务端传输的数据可能被泄露。
图示:
出现这种风险是因为如果只有一组公钥和私钥,则服务端需要使用私钥加密数据,如果有两组公钥和私钥,则可以避免这个问题。
图示:
非对称加密和对称加密组合使用
非对称加密是很耗性能的,HTTPS的做法是两者组合使用,并且只需要一组服务器公钥和密钥实现。当浏览器收到服务器公钥时,随机生成一个密钥Key,使用服务器公钥加密后传输给服务器,服务器通过私钥解密,得到这个密钥,之后浏览器和服务器可以直接使用Key进行加密和解密。密钥Key因为不会明文进行网络传输,因此是安全的。
图示:
中间人攻击
基于上述对称加密和非对称加密组合使用方式,服务器传输公钥时,如果被第三方拦截并替换成第三方公钥,并传输给浏览器,浏览器通过假公钥加密Key,第三方可以通过假公钥对应的私钥解密得到Key,可以同时解密服务器和浏览器数据,造成数据泄露。
图示:
数字证书
中间人攻击的问题在于浏览器如何相信收到的公钥是来自于所访问服务器的,这时引入第三方机构(CA机构)进行公证,服务器网站如果要使用HTTPS,则要在CA机构申领一个证明“自己是自己”的证书,这个证书就是数字证书,当浏览器获从服务器取到证书后,只需要校验是否是CA机构颁发的数字证书即可。
在浏览器左上角点击🔒标识可以查看证书,导出证书,例如知乎:
数字签名(指纹)
为了防止数字证书被篡改,会对数字证书内容hash
生成一个hash
值S
,CA机构会用私钥加密这个hash
值得到数字签名,当浏览器拿到证书后,对数字内容进行hash
生成待校验hash
值S'
,用浏览器预置的公钥解密数字签名得到原文hash
值S
,比对S
与S'
是否相等即可得知数字证书是否被篡改过了。
上个过程中解密数字签名所用到的公钥是操作系统、浏览器等本身会预置信任的根证书,这样公钥就是可信的。
数字证书链
在实际场景中,为了安全和减少根证书CA结构压力,通常会使用证书链。
例如以上知乎证书链,根证书颁发者DigiCert Global Root CA
颁发证书给中间机构GeoTrust CN RSA CA G1
,中间机构生成证书,标识上级颁发机构,使用自己的私钥加密数字签名,中间机构颁发证书给服务器*.zhihu.com
,服务器使用自己的私钥加密数字签名。
当浏览器请求服务器时,校验服务器签名时,查找本地已信任机构查找不到,则没有对应的受信任的公钥用于校验服务器证书可靠性,通过服务器证书的上级颁发者字段获取到中间机构证书,同理,直到查找到根证书CA机构,发现是已受信任机构,使用受信任公钥校验中间证书的签名,发现合法,则中间结构的证书公钥也合法,使用中间证书的公钥校验服务器签名,如果合法则认为服务器数字证书有效。然后可以使用服务器证书中的公钥进行对称密钥的加密。
参考文档
-
廖雪峰的官方网站-对称加密算法 -
数字证书和证书链 -
一文详解HTTPS与TLS证书链校验 -
HTTPS精读之TLS证书校验
原文始发于微信公众号(erpang coding):HTTPS基础原理
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/37394.html