关于网络加密传输

日常使用最多的就是https协议,现在基本上是全网https了。我自己也经常会有些疑问,为此,给自己挖个坑,看能不能彻底把这些问题搞清楚。

现在https使用的基本上都是LTS(Transport Layer Security)协议,最常见的版本是1.2,目前最新的版本是1.3。
最开始是Netscape开发的加密传输协议SSL(Secure Sockets Layer),使用过程中发现很多安全隐患,在2015年6月被RFC 7568废止,对标的TLS1.0基本上也不被主流的客户端支持。
我觉得可能SSL是带有Netscape私有公司的痕迹,所以IETF把SSL换了个名字,叫LTS。

TLS使用「对称密钥加密」的方法来加密通信的内容。
在请求时,客户端会向服务端列出支持的加密解密算法(ciphers)和散列算法(hash functions)列表(比如现在最常见的「带RSA加密的SHA-256」,就是说加密使用了RSA算法,使用SHA-256证书防伪),服务器会选择一个它也支持的加密算法和散列算法,并把选择告诉给客户端
然后服务器会返回给客户端数字证书,证书内有域名、颁发证书的CA、公钥等信息。客户端会验证公钥信息。浏览器会内置权威证书颁发机构(CA)的根证书。CA会给服务器颁发公钥证书和私钥证书,一般是按域名来区分。浏览器是能通过域名来验证证书的

客户端验证公钥通过之后,会使用伪随机数生成随机数,然后使用公钥加密,发送给服务端,服务端会使用私钥进行解密得到这个随机数,然后双方使用这个随机数生成一个唯一的会话密钥。
使用Diffie-Hellman密钥交换来安全地生成一个随机和唯一的会话密钥。(Diffie-Hellman的细节我还没想明白)
之后的会服务器的明文内容会使用会话密钥进行加密,客户端再使用会话密钥解密。服务器和客户端的通信,使用这个会话密钥,进行加密解密

TLS并没有归入到OSI模型的哪一层,我看有的资料放在第6层表示层(Presentation Layer),也有资料说应该是放在第4层传输层(transport layer)。

评论