您阅读本文如果觉得符合大人您的口味,请关注一下本君,点个关注和评论,说一下您的观点。创作不易,还请多多支持!

9.2 这个协议叫啥

网站不支持https是什么意思(啥都玫说之网络篇-9.2这个协议叫啥)(1)

前边已经铺垫好了,现在开始说说这个章节主要说的内容SSL/TLS。

SSL,是英文Secure Sockets Layer的缩写,中文叫做“安全套接层”。它是在20世纪90年代中期,由网景公司设计的。顺便插一句,网景公司不光发明了SSL,还发明了很多Web的基础设施,比如CSS样式表和JavaScript。

为啥要发明SSL这个协议?因为原始的HTTP协议是明文的,存在很多缺点,比如传输内容会被偷窥(嗅探)和篡改。发明SSL协议,就是为了解决这些问题。到了1999年,SSL因为应用广泛,已经成为事实标准。IETF就在那年把SSL标准化。标准化之后的名称改为TLS是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。很多相关的文章都把这两者并列称呼,也就是SSL/TLS,因为这两者可以视作同一个东西的不同阶段,所以大多数文章也只写SSL。

解释完HTTP和SSL/TLS,现在就可以来解释HTTPS啦。咱们通常所说的HTTPS协议,说白了就是“HTTP协议”和“SSL/TLS协议”的组合。可以把HTTPS大致理解为“HTTP over SSL”或“HTTP over TLS”,反正SSL和TLS差不多。

SSL具有以下有点:

SSL协议实现的安全机制包含:

网站不支持https是什么意思(啥都玫说之网络篇-9.2这个协议叫啥)(2)

这就是SSL的结构,在图中可以看到,SSL位于TCP\/IP协议的应用层和传输层之间,它能够为不论什么基于TCP等可靠连接的应用层协议提供安全性保证。SSL协议本身分为两层:

其中:

网站不支持https是什么意思(啥都玫说之网络篇-9.2这个协议叫啥)(3)

这张图就说明了包括服务端和客户端电子证书请求认证的过程。SSL通过握手过程在client和server之间协商会话參数,并建立会话。会话包括的主要參数有会话ID、对方的证书、加密套件(密钥交换算法、数据加密算法和MAC算法等)以及主密钥(master secret)。通过SSL会话传输的数据,都将採用该会话的主密钥和加密套件进行加密、计算MAC等处理。不同情况下,SSL握手过程存在差异。可以叙述为下三种情况下的握手过程:

网站不支持https是什么意思(啥都玫说之网络篇-9.2这个协议叫啥)(4)

仅仅验证server的SSL握手过程,仅仅须要验证SSLserver身份,不须要验证SSLclient身份时,SSL的握手过程为:

SSLclient接收到SSLserver发送的Finished消息后。假设解密成功,则能够推断SSLserver是数字证书的拥有者,即SSLserver身份验证成功,由于仅仅有拥有私钥的SSLserver才干从Client Key Exchange消息中解密得到premaster secret,从而间接地实现了SSLclient对SSLserver的身份验证。

网站不支持https是什么意思(啥都玫说之网络篇-9.2这个协议叫啥)(5)

SSLclient的身份验证是可选的,由SSLserver决定是否验证SSLclient的身份。图中蓝色部分标识的内容所看到的,假设SSLserver验证SSLclient身份。则SSLserver和SSLclient除了交互“仅仅验证server的SSL握手过程”中的消息协商密钥和加密套件外,还须要进行下面操作:

网站不支持https是什么意思(啥都玫说之网络篇-9.2这个协议叫啥)(6)

恢复原有会话的SSL握手过程,协商会话參数、建立会话的过程中。须要使用非对称密钥算法来加密密钥、验证通信对端的身份。计算量较大,占用了大量的系统资源。为了简化SSL握手过程。SSL同意重用已经协商过的会话,详细过程为:

SSL说的差不多了,再说HTTPS。如果大家仔细观察过,或者有所了解,web服务存在HTTP和HTTPS两种通信方式,HTTP默认采用80作为通讯端口,对于传输采用不加密的方式,HTTPS默认采用443,对于传输的数据进行加密传输。目前主流的网站基本上开始默认采用HTTPS作为通信方式。顾名思义,HTTPS\=HTTP SSL,HTTPS是在HTTP的基础上加上了SSL保护,信息的加密过程就是在SSL中完成的。

网站不支持https是什么意思(啥都玫说之网络篇-9.2这个协议叫啥)(7)

那么问题来了,怎么保证保证服务器给客户端下发的公钥是真正的公钥,而不是伪造的公钥呢?

网站不支持https是什么意思(啥都玫说之网络篇-9.2这个协议叫啥)(8)

其实数字证书包括了加密后服务器的公钥、权威机构的信息、服务器域名,还有经过CA私钥签名之后的证书内容(经过先通过Hash函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名),签名计算方法以及证书对应的域名。当客户端收到这个证书之后,使用本地配置的权威机构的公钥对证书进行解密得到服务端的公钥和证书的数字签名,数字签名经过CA公钥解密得到证书信息摘要,然后根据证书上描述的计算证书的方法计算一下当前证书的信息摘要,与收到的信息摘要作对比,如果一样,表示证书一定是服务器下发的,没有被篡改过。因为攻击者虽然有权威机构的公钥,能够解析证书内容并篡改,但是篡改完成之后攻击者需要将证书重新加密,但是攻击者没有权威机构的私钥,无法加密,强行加密只会导致客户端无法解密,如果攻击者强行乱修改证书,就会导致证书内容和证书签名不匹配。

那第三方攻击者能否让自己的证书显示出来的信息也是服务端呢?(伪装服务端一样的配置)显然这个是不行的,因为当第三方攻击者去CA那边寻求认证的时候CA会要求其提供例如域名的whois信息、域名管理邮箱等证明你是服务端域名的拥有者,而第三方攻击者是无法提供这些信息所以他就是无法骗CA他拥有属于服务端的域名。

当然SSL还有其他的应用,比如SSH,VPN。HTTPS只不过是我们日常应用中最常见的一个。

,