当访问一个网址之后发生了什么。
譬如说访问 https://www.baidu.com 之后。
首先先说一下 http 时代,访问 http://www.baidu.com之后。
先说流程:
- www.baidu.com.cn 转化为对应的IP;
- 通过IP及端口号建立TCP连接传输数据。
因为http及https都是基于网络层TCP之上的应用层服务,因此其必须要满足TCP通讯的基本要求,即网络通讯的五元组(源IP,源端口,目的IP,目的端口,协议)。
需要把 www.baidu.com 转换成对应的IP,转换的过程需要DNS服务器协助。
由于http不加密导致中间的代理都能够看到传输的是什么,非常很特别的不安全。因此还是希望能够把中间的内容加密一下。
加密
加密的话就分为对称加密和非对称加密两种。
对称加密特点是快,非对称加密慢但是安全。
为了用户体验当然是越快越好了,但是这样就有一个怎么让两方都知道用什么密钥的问题,因此设计了一个操作即使用非对称加密加密对称加密的密钥,然后双方使用对称加密的密钥通讯。
具体流程如下:
数字证书
这里边有个比较严重的问题就是,由于互联网一个请求会经过很多层代理,因此客户端收到的公钥是否真的是服务器发来的,而不是中间某层代理替换过的,或者说子网内部是否有人假冒服务等情况。为了让这个流程走通,又引入了数字证书。
数字证书分为根证书跟普通证书,数字证书是由CA机构颁发的,CA机构也分级,CA机构分级可以防止互联网整体的私钥暴露风险降低一些,也防止活干不过来。
数字证书的内容包括:证书对应的公钥、域名、有效期、签发机构、数字指纹等等,其中数字指纹是把其他东西给hash一下之后对生成的hash编码使用机构自身的私钥加密,客户端收到的时候使用公钥揭秘一下数字指纹,然后也把证书内部相同的东西给hash一下然后对比是否一致,如果没问题,说明这个证书没有修改过,就是这个网站的。
但是证书也能伪造,那为什么要信任从网络上获取的这个证书呢。。。
证书信任链
首先CA机构都是大公司,卖的是信用,因此选择相信。
百度买的证书是他们授信的,CA公司信任他,那么我们也信任他,爱屋及乌。
因此数字证书的验证流程及为:
一般操作系统或者浏览器内部都已经预制了CA机构的证书,这部分证书都是可信的。
HTTPs
这样整体流程修改为:
题外
证书类型一般写的是 SSL/TLS,那么这两种协议有啥区别呢。
其实最开始的协议是 SSL1.0 -> SSL2.0 -> SSL3.0,不过这三都有缺陷,具体是啥不太好说,然后为了弥补这个问题,搞出来了 TLS1.0 -> TLS1.1 -> TLS1.2,但是由于历史问题,目前大多沿用提一下SSL的说法,其实目前基本上都是使用的TLS协议。