开始之前,必须要理解两点:
- 这里有一对key(public key,private key)使用public key加密的数据只能通过对应的private key进行解密。
- 能够获取证书机构(Certificate Authoriaztion)的public key的浏览器,在获取到具有签名(public key进行加密)的数据时,能够验证该数据是从能够获取证书机构的private key的服务器中发送过来的。
https工作原理
- 浏览器请求youtube服务器
- youtube服务器返回使用google ca 进行签名之后的证书(certificate)
- 浏览器有google ca的public key,能够验证该证书就是从youtube server(能获取google ca的private key)中发送过来的。
- 浏览器发送请求告诉youtube server,浏览器信任google ca并确定就是youtube server发送过来的, 并创建一个private key(使用public key加密)发送给youtube server。
- 现在youtube server就有浏览器的private key,就可以使用private key进行解密数据了。
- 现在,浏览器与youtube server就可以使用这一对(private key,public key)key进行加密解密了。
CA对证书进行签名
- youtube server 发送证书签名请求。希望google ca 对证书进行签名
- google ca使用private key对certificate(拥有youtube server的public key)进行签名。(拥有google ca 的public key的浏览器就可以验证证书就是google ca使用private key进行签名的)
自签名证书(self-signed certificate)
有些时候,比如测试时,可以不需要受信的certificate authority的证书。
- 你的应用服务器server发送证书签名请求。
- 你的证书机构对证书进行签名。
- 浏览器获取到证书时,发现这个证书不是受信的。就会询问你是否信任这个证书并继续。
总结
要理解https的工作原理。必须理解
- 签名机制的工作原理
- 使用public key,private key进行加密解密数据。