ssl握手协议中的CipherSuite

下面是一个ssl握手的过程,没有进行客户端验证:

1.C-S:ClientHello---cipher-suit-list

2.S-C:ServerHello---selected-cipher-suit

3.S-C:ServerKeyExchange

4.S-C:ServerHelloDone

5.C-S:ClientKeyExchange

6.C-S:完成

7.S-C:完成

第3步是否发送要看c和s协商的cipher-suit是什么,cipher-suit包含四个部分(将摘要算法并入认证算法的话也可以看作三个部分),第一是密钥交换算法,第二是签名算法/验签算法,第三是摘要算法,第四是对称加密算法,RFC2246中建议了很多中组合,一般写法是"密钥交换算法-签名算法-对称加密算法-摘要算法",如果只有rfc的建议是可用的,那就难免要在各个ssl实现中加以若干硬性的规定,这样密钥交换和认证就不得不耦合起来了,比如使用ECC算法签名的证书不能使用RSA算法进行密钥交换,证书中密钥太长的的涉及出口限制的必须使用临时rsa进行密钥交换,如果使用rsa作为密钥交换算法,那么在ClientKeyExchange中的pre-master必须用证书中的公钥加密等等,之所以有这么多限制就是因为一些人或者机构的管理因素在里面,比如美国的出口限制等等,从协议本身来说,这些限制是不应该的,证书仅仅用于认证,而不和密钥交换挂钩,当然,它们之间也不是没有任何关系,比如KeyExchange消息本身就需要认证,而认证的公私钥信息可以在证书中。

协议本身来看,任何的算法都能组合成一个cipher-suit,以RFC2246的一个建议为例,使用RSA作为密钥交换算法的不能发送ServerKeyExchange消息,我们来看一下如何违反它从而实现一个新的不在RFC中的cipher-suit,这个cipher-suit使用rsa作为密钥交换算法,但是使用ecdsa作为认证算法,暂且不考虑对称加密算法和摘要算法。仍以上述握手过程为例,第2步时server端选择了RSA-ECDSA-XX-YY这个cipher-suit,紧接着第3步,server将自己的使用ecdsa签名的证书发送给了client,client用ca的ecc公钥验证server证书中ecc签名,然后server违反rfc建议,在密钥交换算法是rsa的情况下发送ServerKeyExchange消息,由于使用rsa进行密钥交换,而证书中的公钥是ecc算法签名的,那么这个ServerKeyExchange消息中必须包含一个临时的rsa公钥,server自己保留临时rsa私钥,然后server用自己的ecc私钥将这个ServerKeyExchange消息进行签名后发给client,client收到后会使用server证书中的ecc公钥来验证这个签名,通过后保存该消息中提取的server的临时rsa公钥,接着处理完hellodone消息后生成一个pre-master,然后用刚才保存的server临时rsa公钥加密这个pre-master作为ClientKeyExchange消息发送给server,随后两端使用密钥导出算法导出一个对称密钥,认证完成,密钥交换完成,握手完成。

上述的整个过程理解起来很简单,就把ecc算法签名的证书当成密钥太长并有出口限制的rsa证书即可。总之,不考虑匿名dh以及一切类似情况下,任何需要验证的地方,公钥一般都取证书里面的,私钥都取本地加载的,涉及密钥交换的地方,严格按照cipher-suit中的算法进行。以上的论述在OpenSSL中不被支持,要想让OpenSSL支持这个RSA-ECDSA-XX-YY的话就必须修改OpenSSL的源代码,这个修改很简单,仅仅修改s3_srvr.c,s3_clnt.c等不多的几个文件即可,加上对诸如(l & SSL_kRSA) && (l & SSL_aECDSA)等组合的判断,本文不述。总之,就协议而言,任意的算法都能组合成一个cipher-suit。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

原文地址:https://www.cnblogs.com/ksiwnhiwhs/p/10390422.html

时间: 2024-10-10 14:13:49

ssl握手协议中的CipherSuite的相关文章

SSL 握手协议详解

RSA作为身份认证,ECDHE来交换加密密钥,AES/DES等作为加密. 如果RSA来加解密,那么身份认证后,直接用认证后的RSA公钥解密.不需要再额外交换加密密钥了. 相关报文: 报文类型 参数 hello_request 空 client_hello 版本.随机数.会话ID.密文族.压缩方法 server_hello 版本.随机数.会话ID.密文族.压缩方法 certificate x.509V3证书链 server_key_exchange 参数.签名 certificate_reques

SSL/TLS 协议详解

SSL(Secure Sockets Layer,安全套接层),及其继任者 TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议.TLS与SSL在传输层对网络连接进行加密. 为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听. SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持.SSL协议可分为两层: 

SSL安全协议理论及双向认证的简单实现

安全套接层(Secure Sockets Layer.SSL)是基于Internet基础的一种保证私秘性的安全协议.它能使客户服务应用间的通信不被窃听,并能始终对服务器和客户端进行认证.SSL协议要求建立在可靠的传输层协议之上.SSL协议是与应用层协议独立无关的,高层的应用协议能透明的建立于SSL协议上.SSL协议在应用层协议通信之前就已完成加密算法.通信密钥的协商及服务器认证工作.在此后应用层协议所传送的数据都会被加密,从而保证通信的私密性. 发展状况 SSL协议于1994年由Netscape

webservice ssl 1 SSL/TLS 协议入门

SSL(Secure Sockets Layer,安全套接层),及其继任者 TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议.TLS与SSL在传输层对网络连接进行加密. 为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听. SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持.SSL协议可分为两层:

SSL握手流程

一.SSL是什么? 安全套接字(SSL)协议是Web浏览器和Web服务器之间安全交换信息的协议. SSL介于应用层和TCP层之间,应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头. History: 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布. 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞. 1996年,SSL 3.0版问世,得到大规模

SSL/TLS协议详解

   SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户端和服务器之间的安全通讯.该协议由两层组成:SSL记录协议和SSL握手协议. TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性.该协议由两层组成:TLS记录协议和TLS握手协议. SSL (Secure Socket La

tcp三次握手协议

三次握手(three times handshake:three-way handshake)所谓的“三次握手”即对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送.接收完毕后何时撤消联系,并建立虚连接. 为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息.TCP总是用来发送大批量的数据.当应用程序在收到数据后要做出确认时也要用到TCP. 过程 第一次 第一次握手:建立连接时

公钥私钥与SSL的握手协议(转)

一,公钥私钥1,公钥和私钥成对出现2,公开的密钥叫公钥,只有自己知道的叫私钥3,用公钥加密的数据只有对应的私钥可以解密4,用私钥加密的数据只有对应的公钥可以解密5,如果可以用公钥解密,则必然是对应的私钥加的密6,如果可以用私钥解密,则必然是对应的公钥加的密明白了? 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们,然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有

TCP协议中的三次握手和四次挥手(图解)【转】

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. [更新于2017.01.04 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好.这么久才来更新,抱歉!! 错误配图如下: 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?