对称加密 客户端和服务器使用同一把钥匙,加密算法公开
非对称加密 不同钥匙,公钥加密的私钥可以打开 私钥加密的公钥可以打开
HTTPS关键:
1. 要传输的业务数据,使用对称加密。
客户端生成私钥,并传送给服务器。 ☆
客户端用私钥加密后的业务数据,传送给服务器。
服务器再用这个私钥来解密业务数据。
2. 客户端的私钥本身,使用非对称加密。
客户端拿到服务器的公钥后,对私钥进行加密后才传给服务器。☆
服务器用自己的私钥来解密客户端的私钥
流程:
服务器S --> 客户端C S家公钥 第一步
客户端C --> 服务器S S家公钥加密过的C家私钥
服务器 用S家私钥解密,获取到原始的C家私钥。
客户端C -->服务器S C家私钥加密过的业务数据
服务器 用C家私钥解密业务数据
问题: 第一步黑客可以伪造公钥给客户端来试图获取C家私钥
解决方法: S家的公钥也要有担保人。
全球公认的就100多家公司(CA公司)用于认证。
数字证书。用于客户端来探明公钥网站的合法权威性。
数字证书 = CA家的私钥加密过的S家公钥 + 过期时间 等
设备上装了公认的100多家CA公司的公钥。
如果说,设备上的100多家CA公司的公钥有能够解析数字证书的,说明该证书合法,非客户所为。
参考一下文的总结:
总结:
HTTPS的传输过程涉及到了对称加密和非对称加密,对称加密加密的是实际的数据,非对称加密加密的是对称加密所需要的客户端的密钥。
为了确保客户端能够确认公钥就是想要访问的网站的公钥,引入了数字证书的概念,由于证书存在一级一级的签发过程,所以就出现了证书链,在证书链中的顶端的就是根CA。
Android客户端不信任服务器证书的原因主要是因为客户端不信任证书链中的根证书CA,我们应该让我们的App去信任该根证书CA,而不是直接信任网站的自身的数字证书,因为网站的数字证书可能会发生变化。
http://blog.csdn.net/iispring/article/details/51615631#rd