HTTPS工作在客户端和服务器端之间。客户端和服务器本身都会自带一些加密的算法,用于双方协商加密的选择项。
1、客户端首先会将自己支持的加密算法,打个包告诉服务器端。
2、服务器端从客户端发来的加密算法中,选出一组加密算法和HASH算法(注,HASH也属于加密),并将自己的身份信息以证书的形式发回给客户端。而证书中包含了网站的地址,加密用的公钥,以及证书的颁发机构等;
我们常见的加密算法一般是一些对称的算法,如凯撒加密;还有一种加密解密算法称之为非对称算法。这种算法加密用的密钥(公钥)和解密用的密钥(私钥)是两个不同的密钥;通过公钥加密的内容一定要使用私钥才能够解密。
这里,服务器就将自己用来加密用的公钥一同发还给客户端,而私钥则服务器保存着,用户解密客户端加密过后的内容。
3、客户端收到了服务器发来的数据包后,会做这么几件事情:
1)验证一下证书是否合法。一般来说,证书是用来标示一个站点是否合法的标志。如果说该证书由权威的第三方颁发和签名的,则说明证书合法。
2)如果证书合法,或者客户端接受和信任了不合法的证书,则客户端就会随机产生一串序列号,使用服务器发来的公钥进行加密。这时候,一条返回的消息就基本就绪。
3)最后使用服务器挑选的HASH算法,将刚才的消息使用刚才的随机数进行加密,生成相应的消息校验值,与刚才的消息一同发还给服务器。
4、服务器接受到客户端发来的消息后,会做这么几件事情:
1)使用私钥解密上面第2)中公钥加密的消息,得到客户端产生的随机序列号。
2)使用该随机序列号,对该消息进行加密,验证的到的校验值是否与客户端发来的一致。如果一致则说明消息未被篡改,可以信任。
3)最后,使用该随机序列号,加上之前第2步中选择的加密算法,加密一段握手消息,发还给客户端。同时HASH值也带上。
5、客户端收到服务器端的消息后,接着做这么几件事情:
1)计算HASH值是否与发回的消息一致
2)检查消息是否为握手消息
6、握手结束后,客户端和服务器端使用握手阶段产生的随机数以及挑选出来的算法进行对称加解密的传输。
为什么不直接全程使用非对称加密算法进行数据传输?这个问题的答案是因为非对称算法的效率对比起对称算法来说,要低得多得多;因此往往只用在HTTPS的握手阶段。
以下是我们一些经常使用的加密算法,是不是有熟悉的味道?
非对称加密算法:RSA, DSA/DSS
对称加密算法: AES, 3DES
HASH算法:MD5, SHA1, SHA256
原文链接:http://www.jianshu.com/p/650ad90bf563