记录一下对HTTPS安全的理解,重点在于为什么和解决方式,具体的术语可能不太规范。
非对称加密
HTTP最开始的目的就是传输文本信息,没有考虑到安全性。局域网中的任何计算机可以监听另一台计算机的数据包,这样传输的账号密码也就会被看到,非常不安全。 很容易想到,需要对数据进行加密。
对称加密
对称加密,加密和解密是使用同一个密钥。也就是说客户端和服务端发送密文之前,必须要由某一方发送一个密钥,另一方拿到密钥后,才能进行加密。 这种方式的漏洞在于,监听者同样可以监听到密钥交换的报文,这样监听者只需要拿到密文后用密钥解密一下,就可以得到原文,无法保护信息安全。
非对称加密
这个时候非对称加密的优势就体现出来了。非对称加密中加密和解密使用的密钥是不同的。客户端和服务端发送密文前,由服务端发送用于加密的密钥给客户端,客户端用加密密钥 对原文进行加密后,将密文发送回去,服务端收到之后用解密密钥 解密得到原文。 通过这种方式交换对称加密 的密钥,避免监听者得到后续通信使用的密钥,就可以保证信息只有通信双方才能知道。
中间人攻击
非对称加密阻止了攻击者通过监听的方式获取敏感信息。但是攻击者可以使用某种手段,让客户端把攻击者当成是服务端。攻击者将自己的非对称加密 的加密密钥 发送给客户端。这样客户端发送密文给攻击者之后,攻击者就可以自己的解密密钥 进行解密,得到原文后再代替客户端向服务端发起请求。这样就可以继续监听通信信息,甚至可以篡改信息。
CA机构
中间人攻击能够成功的关键在于,客户端无法判断自己请求的服务端的身份。客户端访问服务端时,不知道自己拿到的公钥是不是正确的。所以这里的问题是判断公钥的归属。 CA机构就是这样的一个机构,服务端生成公私钥后向CA机构申请一个证书。通信前将证书发送给客户端,客户端收到证书后找CA机构验证,验证通过就可以知道自己请求的是正确的服务端。
数字证书
如果验证证书的时候也是通过网络请求找CA机构验证的话,就会绕回了问题的原点,攻击者可能伪装CA机构。所以这就要求证书的验证必须本地进行。 这个时候非对称加密又派上用场了。CA机构用私钥加密一份证书,如果客户端能用CA机构的公钥解密,就说明这个证书是CA机构加密的,表示这份证书是由CA机构颁发的。这样客户端只需要在本地保存一份CA机构的公钥就能进行验证了。 这里解释了为什么根证书很重要,根证书保存着CA机构的公钥
数字签名
如果单纯加密整份证书,也就意味着客户端解密出来什么数据就当成CA机构发了什么数据。攻击人虽然没办法指定内容(因为加密需要CA的私钥进行),但是可以传随机值给客户端。这样客户端拿到随机值,就会投诉CA机构,“你发的都是些什么证书啊” 为了避免被投诉,CA机构发下的证书会带上签名。证书的内容是:明文(服务端的公钥、额外的信息),用CA机构私钥加密的密文(明文的摘要、生成摘要的算法)(这就是签名部分)。 有了签名,客户端就可以校验证书的内容是否和CA机构颁发的一样。用CA机构的公钥解密签名,得到明文部分的摘要和生成摘要的算法,根据算法把证书明文部分的摘要自己算出来,和解密出来的摘要进行比较,就可以判断出内容是否被篡改了。这样就算攻击人传递随机值,客户端也能够自己判断出内容被篡改。 另外,我会疑惑,为什么要用摘要,直接证书中直接包含证书的明文+证书的密文,这样解密出来也可以和明文比较判断。但实际上是判断不出来的,因为攻击者也有CA的公钥。他在篡改密文部分后,可以自己先用CA的公钥解密一下,得到“篡改后的明文”,再将篡改后的明文和密文拼回一起。这样客户端密文解密出来肯定是和明文一样的。但是使用摘要就可以避免这种手段,因为篡改后的密文是随机的,而摘要算法又是单向的散列算法,很难根据摘要还原原文。
|