对Https的原理有点不清楚,研究了下,总结如下,
首先是几个关键字:
Certification, RSA, Symmetric key
Https使用了SSL/TSL通信协议来实现互联网上的通信加密。
SSL(Secure Sockets Layer)是TSL(Transport Layer Security)的前身,已经没了十几年了。
Https的请求在发起真正的数据交换之前做了好多事情都是对用户透明的,只有在地址栏上才能看出一些端倪:
- 第一种情形是https enable并且Certification得到了认可;
- 第二种情形是https enable但是Certification没有得到认可;
- 第三种是压根没enalbe https
首先贴一下https在真正数据交换之前的所完成的步骤:
- 浏览器(client end)发起https请求,内容一般包括:
a. 希望使用的TSL版本
b. 浏览器支持的加密算法 - 服务器的回复并附加Certification, 回复的内容一般包括:
a. server同意采用的TSL版本
b. server告知进行Symmetric key传输和校验Certification的加密算法(RSA)
Certification,
证书,跟毕业证书挺像的,也是由一个受信任的机构颁发,颁发给某机构或者某个人某个机器,有有效期,签名,多了一个东西是public key。
作用也跟毕业证挺像,浏览器收到由知名机构签发签发(比如:Versign),有效期内证书,先信了一半,然后在用附带的public key把数字签名解密,如果跟正在访问的域名一致,那就齐了。
就会是上面的第一种情形了。
那浏览器怎么知道谁是知名机构呢,那是os内置了一些知名机构的根证书,比如在firefox中的这个例子:
规则是如果根证书受信,子证书就受信。
注意用public key解密签名这一项,就可以防止dns被篡改的攻击。
3. Browser端生成symmetric key,这是用于将来交换数据所用的加密key
4. 使用Server选定的加密算法(RSA)和Public key对生成的Symmetric key进行加密然后发送给server端
5. Server用Private key进行解密的到Symmetric key
6. 至此https connection就建立起来了,真正的数据交换使用Symmetric key进行加密后开始。
另外非对称加密(RSA)就不多说了哈。