ssl/tls之个人见解

最近在读docker1.9以及registry:2即distribution的源码,因为docker1.9中client和server通信用的是tls,所以,研究了tls,再次写下个人理解。

SSL:Secure Socket Layer,位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。

TLS:Transport Layer Security,是建立在SSL3.0协议规范之上,是SSL3.0的后续版本。

该协议的简要说明:

client首先连接,它会向server提交自己所用的ssl/tls协议版本,另外当server支持客户端所用的版本时,client和server要商议所用的ciphersuite和加密算法。之后,服务器向客户端发送证书certificate,该证书必须对于client或者clinet信任的第三方来说是可信的。当client确认了server身份后,双方会交换密钥key,具体是什么密钥跟选定的ciphersuite有关,但一般都选对称密钥,因为非对称密钥速度慢以及需要产生的数据量大。当client接受到certificate并且双方完成密钥交换后,就可以向server传送加密并且验证过的消息了。服务器端验证mac(用于authentication)的正确性,然后解压数据。之后,返回消息,客户端会做同样的验证。简要图示如下:

ssl/tls之个人见解_第1张图片

一些细节:

certificate其实是一个公钥,当client确保certificate可信时,用该证书加密信息其实就是签名,server可以用私钥解密。

mac怎么用于消息验证的,mac是Message Authentication Code的缩写,是用certificate签名后的数据,通信的另一端用私钥解密可以确定数据确实来自另一方,而不是被人截断后冒名发的。

服务端先向客户端发送certificate的原因是,client可以将key用certificate签名后再发送给server,只有server能够用私钥解密该key,确保了两者用于通信的对称密钥的安全。

关于为什么certificate对于client信任的第三方来说是可信的,那么对于client也是可信的的原理我也不太清楚,暂时没时间细细研究了,docker源码暂时不需要搞明白这一块儿,先撂一下。







你可能感兴趣的:(ssl,tls,https)