TLS 流程新解(未经证实)

写这文章的是为了梳理整个SSL/TLS流程,一步步进行说明

TLS : TLS是SSL的新版的叫法(不会表达= =),SSL最新版是3.0 但SSL更新一版不是叫 3.1或4.0,而是叫 TLS 1.0,从此新版都叫 TLS 1.X 。TLS最新版本是

对称加密:用密钥K加密的密文需要只能用密钥K解密(算法有AES,DES等)

非对称加密:出现一对密钥,称为公钥和私钥,公钥加密的密文只能用私钥解密,私钥加密的密文只能用公钥解密(算法有DH,ECC,RSA等)

RSA:据上可知是非对称加密算法,并且它也是数字签名的算法,这个很多人都忽略了,包括我。参考

DH:DH也是非对称加密,不过密钥交换算法有点特别,例如有A和B两对不同的DH密钥对 ,但双方都能根据自己的私钥和对方的公钥生成相同(未证实)的本地密钥。

想知道如何交换数据,可以知乎(刘巍然-学酥的答案),比较简单明了 http://www.zhihu.com/question/35137387

SSL/TLS 最基本的3次握手可以看这里 并且附加了图解

好了,假设你有了上面的基础知识下面就讲解TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256是什么意思。

回到开始,在申请SSL证书的时候,要求我们上传自己生成的证书(A),然后SSL证书供应商用他的私钥对我们的证书进行了签名。这个证书(A)必须用非对称加密的方式生成,现在最多是用RSA算法。SSL证书供应商的公钥已经安装在我们的操作系统(Windows/Linux),什么时候安装的?据我所知道是装系统的时候就安装了一些,然后系统更新的时候会更新/增加/删除证书。SSL证书供应商的证书一般称之为根证书或CA证书。

看下图,RSA和DH密钥协商

TLS 流程新解(未经证实)_第1张图片

TLS 流程新解(未经证实)_第2张图片

TLS第一次握手是没有区别,区别从服务器收到clientHello开始。服务器收到浏览器支持 的加密方法,然后根据服务器配置获取到大家都支持的加密算法,算法的优先顺序也是服务器设置的。可了解nginx的ssl_ciphers。

然后流程就是服务器发送数据证书之类的,但是当协商使用的是DH算法的话,服务器会生成DH密钥对,并且用申请SSL证书的RSA私钥对DH公钥签名发送给浏览器。

浏览器收到证书,根据证书的链找到CA证书,然后用系统的里面CA证书的公钥对收到的证书进行解密和校验,不正确就当然88了。

如果是RSA密钥协商,就生成随机数,并用服务器发来的公钥进行加密和签名,再发给服务器。服务器用SSL证书的RSA私钥校验和解密,然后双方都根据得到的三个随机数生成master secret。

但如果是DH密钥协商,浏览器在本地生成DH密钥对,再将公钥发给服务器。服务器用SSL证书的RSA私钥对浏览器的DH公钥进行校验,然后双方都根据之前的两个随机数和DH的本地密钥生成master secret。

至此,大家都能进行安全交谈了。久没有写文章,有错或表达不好请狠狠地指出




你可能感兴趣的:(TLS 流程新解(未经证实))