证书颁发机构(CA) 和 客户端的证书验证
背景:
- 非对称加密:有一对公钥秘钥,公钥加密的数据只能通过密钥解密,密钥加密的数据只能通过公钥解密
- 客户端含有CA机构的根证书R,根证书R里含:CA机构的公钥pk
- 服务端含有CA机构颁发的证书A,证书A里含:证书内容F,用CA机构的私钥sk加密F所得的证书加密内容Fs
过程:
客户端与服务端建立https连接时,服务端将证书A返回给客户端;客户端用根证书R里的公钥pk去解密证书A里的证书加密内容Fs,若能还原得F则证书验证通过。
整个流程大致是:
1 | |--- CA机构 ---|--- 客户端 ---| |
SSL Pinning
客户端直接保存服务端的证书,建立https连接时客户端直接对比服务端返回的和自己保存的两个证书是否一致
不需要CA机构了(CA机构颁发证书较贵),可以自己颁发证书
适用于非浏览器应用,比如CS架构的app。因为浏览器跟很多未知服务器打交道,无法保存每个服务器的证书
中间人虽然可以从客户端取出证书伪装成服务器并通过证书验证,但后续的数据通讯客户端会用证书中的公钥加密,中间人没有私钥无法解密
SSL的握手过程
客户端和服务端一共同步三个随机数以生成最后的session key。前两个随机数client random和server random明文传输,第三个随机数pre-master key用服务器的公密钥加解密(非对称加密)
握手完成后的通信是普通的http协议,只是都用session key加解密(对称加密)
服务器公钥是放在数字证书中传给客户端的,这是为了保证公钥不被篡改。只要证书是可信的,公钥就是可信的