从上一篇HTTPS中CA证书的签发及使用过程中知道服务端在申请CA证书时只上交了密钥对中的公钥,那么只有服务端知道的私钥有什么作用呢?
SSL/TLS层在网络模型的位置,它属于应用层协议。接管应用层的数据加解密,并通过网络层发送给对方。
SSL/TLS协议分握手协议和记录协议,握手协议用来协商会话参数(比如会话密钥、应用层协议等等),记录协议主要用来传输应用层数据和握手协议消息数据,以及做加解密处理。我们应用层的的消息数据在SSL记录协议会给分成很多段,然后再对这个片段进行加密,最后在加上记录头后就发送出去。
SSL/TLS 握手协议又细分为四个子协议,分别是握手协议、密码规格变更协议、警告协议和应用数据协议。
首先是TCP握手,TCP三次完成之后才进入SSL握手,SSL握手总是以ClientHello消息开始,就跟TCP握手总是以SYN包开始一样。
两种使用方式分别是:使用RSA来做密钥交换和使用ECDHE来做密钥交换。对于RSA来说,客户端生成预主密钥,然后用公钥加密再发给服务器,服务器用私钥来解密得到预主密钥,然后由预主密钥生成主密钥,再由主密钥生会话密钥,最后用会话密钥来通信。
对于ECDHE来说,客户端和服务器双方是交换椭圆曲线参数,私钥只是用来签名,这是为了保证这个消息是持有私钥的人给我发的,而不是冒充的。双方交换完参数之后生成预主密钥,再生成主密钥和会话密钥。这就跟刚才RSA后面的流程一样了。
可以看出RSA和椭圆曲线密钥交换算法的私钥用途是不一样的,RSA密钥交换时是用来做加解密的,椭圆曲线密钥交换时是用来做签名的。
主密钥是由预主密钥、客户端随机数和服务器随机数通过PRF函数来生成;会话密钥是由主密钥、客户端随机数和服务器随机数通过PRF函数来生成,会话密钥里面包含对称加密密钥、消息认证和CBC模式的初始化向量,但对于非CBC模式的加密算法来说,就没有用到这个初始化向量。
session 缓存和session ticket里面保存的是主密钥,而不是会话密钥,这是为了保证每次会话都是独立的,这样才安全,即使一个主密钥泄漏了也不影响其他会话。
还有很多其他的密码交换/协商机制:https://blog.csdn.net/andylau00j/article/details/54583769
主要摘自http://www.360doc.com/content/18/0606/20/13644263_760231690.shtml
手机扫一扫
移动阅读更方便
你可能感兴趣的文章