SSL握手协议:客户端和服务器通过握手协议建立一个会话。会话包含一组参数,主要有会话ID、对方的证书、加密算法列表(包括密钥交换算法、数据加密算法和MAC算法)、压缩算法以及主密钥。SSL会话可以被多个连接共享,以减少会话协商开销。
握手第一阶段:
建立起安全能力属性,客户端发送一个ClientHello消息,包括以下参数:
版本:消息中协议版本是两个byte长度分别表示主次版本。目前SSL拥有的版本有SSLv1、SSLv2、SSLv3以及TSLv1(即SSLv3.1)。
随机数:32位时间戳+28字节随机序列,用于在后面计算所有消息的摘要或计算主密钥。
会话ID:SSL会话ID标识一次会话用,可以重用。
客户端支持的密码算法列表(CipherSuite):密钥套件列表,列表中包含了Client端支持的所有密钥套件。
客户端支持的压缩方法列表:客户端支持的压缩算法列表,填0表示空。
当服务器收到包含以上信息的ClientHello消息后,服务器发送ServerHello消息,并包括以下参数:
版本:服务器拿出ClientHello消息中的版本号,再看看自己支持的版本列表,选择两者都支持的最高版本号定为这次协商出来的SSL协议使用的版本。
服务器产生的随机数:此处产生的随机数与ClientHello消息中的类似。
会话ID:服务器端检测到传过来的Session ID是空或者检索Session列表没有发现传过来的Session ID就会新建一个。
服务器从客户端建议的密码算法中挑出一套(CipherSuite)密码算法。
服务器从客户端建议的压缩方法中挑出一个压缩算法。
第二阶段:
Certificate消息(可选)
一般情况下,除了会话恢复时不需要发送该消息,在SSL握手的全流程中,都需要包含该消息。消息包含一个X.509证书,证书中包含公钥,发给客户端用来验证签名或在密钥交换的时候给消息加密。
Server Key Exchange(可选)
根据之前在ClientHello消息中包含的CipherSuite信息,决定了密钥交换方式(例如RSA或者DH),因此在Server Key Exchange消息中便会包含完成密钥交换所需的一系列参数。
Certificate Request(可选)
服务器端发出Certificate Request消息,要求客户端发他自己的证书过来进行验证。该消息中包含服务器端支持的证书类型(RSA、DSA、ECDSA等)和服务器端所信任的所有证书发行机构的CA列表,客户端会用这些信息来筛选证书。
ServerHello Done
该消息表示服务器已经将所有信息发送完毕,接下来等待客户端的消息。
第三阶段:
Certificate(可选)
如果在第二阶段服务器端要求发送客户端证书,客户端便会在该阶段将自己的证书发送过去。服务器端在之前发送的Certificate Request消息中包含了服务器端所支持的证书类型和CA列表,因此客户端会在自己的证书中选择满足这两个条件的第一个证书发送过去。若客户端没有证书,则发送一个no_certificate警告。
Client Key exchange
根据之前从服务器端收到的随机数,按照不同的密钥交换算法,算出一个pre-master,发送给服务器,服务器端收到pre-master算出main master。而客户端当然也能自己通过pre-master算出main master。如此以来双方就算出了对称密钥。
Certificate verify(可选)
只有在客户端发送了自己证书到服务器端,这个消息才需要发送。其中包含一个签名,对从第一条消息以来的所有握手消息的HMAC值(用master_secret)进行签名。
第四阶段:
建立起一个安全的连接,客户端发送一个Change Cipher Spec消息,并且把协商得到的CipherSuite拷贝到当前连接的状态之中。然后,客户端用新的算法、密钥参数发送一个Finished消息,这条消息可以检查密钥交换和认证过程是否已经成功。其中包括一个校验值,对客户端整个握手过程的消息进行校验。服务器同样发送Change Cipher Spec消息和Finished消息。握手过程完成,客户端和服务器可以交换应用层数据进行通信。
SSL VPN通过虚拟网关来进行身份认证和角色授权.主要业务:WEB代理、文件共享、端口转发、网络扩展、用户认证
身份认证:本地认证、服务器认证、证书认证
角色授权:本地授权、服务器授权
握手第一阶段:
建立起安全能力属性,客户端发送一个ClientHello消息,包括以下参数:
版本:消息中协议版本是两个byte长度分别表示主次版本。目前SSL拥有的版本有SSLv1、SSLv2、SSLv3以及TSLv1(即SSLv3.1)。
随机数:32位时间戳+28字节随机序列,用于在后面计算所有消息的摘要或计算主密钥。
会话ID:SSL会话ID标识一次会话用,可以重用。
客户端支持的密码算法列表(CipherSuite):密钥套件列表,列表中包含了Client端支持的所有密钥套件。
客户端支持的压缩方法列表:客户端支持的压缩算法列表,填0表示空。
当服务器收到包含以上信息的ClientHello消息后,服务器发送ServerHello消息,并包括以下参数:
版本:服务器拿出ClientHello消息中的版本号,再看看自己支持的版本列表,选择两者都支持的最高版本号定为这次协商出来的SSL协议使用的版本。
服务器产生的随机数:此处产生的随机数与ClientHello消息中的类似。
会话ID:服务器端检测到传过来的Session ID是空或者检索Session列表没有发现传过来的Session ID就会新建一个。
服务器从客户端建议的密码算法中挑出一套(CipherSuite)密码算法。
服务器从客户端建议的压缩方法中挑出一个压缩算法。
第二阶段:
Certificate消息(可选)
一般情况下,除了会话恢复时不需要发送该消息,在SSL握手的全流程中,都需要包含该消息。消息包含一个X.509证书,证书中包含公钥,发给客户端用来验证签名或在密钥交换的时候给消息加密。
Server Key Exchange(可选)
根据之前在ClientHello消息中包含的CipherSuite信息,决定了密钥交换方式(例如RSA或者DH),因此在Server Key Exchange消息中便会包含完成密钥交换所需的一系列参数。
Certificate Request(可选)
服务器端发出Certificate Request消息,要求客户端发他自己的证书过来进行验证。该消息中包含服务器端支持的证书类型(RSA、DSA、ECDSA等)和服务器端所信任的所有证书发行机构的CA列表,客户端会用这些信息来筛选证书。
ServerHello Done
该消息表示服务器已经将所有信息发送完毕,接下来等待客户端的消息。
第三阶段:
Certificate(可选)
如果在第二阶段服务器端要求发送客户端证书,客户端便会在该阶段将自己的证书发送过去。服务器端在之前发送的Certificate Request消息中包含了服务器端所支持的证书类型和CA列表,因此客户端会在自己的证书中选择满足这两个条件的第一个证书发送过去。若客户端没有证书,则发送一个no_certificate警告。
Client Key exchange
根据之前从服务器端收到的随机数,按照不同的密钥交换算法,算出一个pre-master,发送给服务器,服务器端收到pre-master算出main master。而客户端当然也能自己通过pre-master算出main master。如此以来双方就算出了对称密钥。
Certificate verify(可选)
只有在客户端发送了自己证书到服务器端,这个消息才需要发送。其中包含一个签名,对从第一条消息以来的所有握手消息的HMAC值(用master_secret)进行签名。
第四阶段:
建立起一个安全的连接,客户端发送一个Change Cipher Spec消息,并且把协商得到的CipherSuite拷贝到当前连接的状态之中。然后,客户端用新的算法、密钥参数发送一个Finished消息,这条消息可以检查密钥交换和认证过程是否已经成功。其中包括一个校验值,对客户端整个握手过程的消息进行校验。服务器同样发送Change Cipher Spec消息和Finished消息。握手过程完成,客户端和服务器可以交换应用层数据进行通信。
SSL VPN通过虚拟网关来进行身份认证和角色授权.主要业务:WEB代理、文件共享、端口转发、网络扩展、用户认证
身份认证:本地认证、服务器认证、证书认证
角色授权:本地授权、服务器授权