openssl不是内部或外部命令_SSL&OpenSSL

  • Post author:
  • Post category:其他


7a503375c1f8095d77006db5942267e2.png


SSL

ssl协议(Secure Sockets Layer安全套接层)是一套网络通信安全协议,是由网景公司在1994年创建设计的,它具有数据加密,完整性校验及身份验证功能。它的出现是为了保证网络数据传输的安全性。如果没有SSL的加持,我们在网络中传输的数据就都处在裸奔的状态。SSL协议处在应用层和传输层之间,可以为任何基于TCP等可靠连接的应用层协议提供安全性保证。

SSL协议本身分为两层:上层为SSL握手协议(SSL Handshake Protocol),SSL密码变化协议(SSL change cipher spec Protocol)和SSL警告协议(SSL alert Protocol),它们建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证,协商加密算法,交换加密密钥等

de8cfb60c7180c0ebd420817313b800e.png


SSL握手过程

SSL握手过程在客户端和服务器之间协商会话参数,并建立会话。会话包含的主要参数由会话ID,对方的证书,加密套件(密钥交换算法,数据加密算法和MAC算法等)以及主密钥(Master Secret)。通过SSL会话传输的数据,都将采用该会话的主密钥生成的工作密钥和加密套件进行加密,计算MAC等处理。

工作密钥:并不是直接生成的。是客户端生成一个预主密钥(pre master secret),然后用密钥交换算法发给服务器端。两端根据这个预主密钥计算生成主密钥,再用主密钥生成工作密钥。

c4781216c8094769701ccad1a22d7323.png


RSA握手过程(简版)

e3df3508dd59f759206587b1ea339384.png


ECDHE握手过程(简版)

e9411303fa00825f0e56f622de5a601b.png


单向校验流程

1 SSL客户端通过Client Hello消息将它支持的SSL版本,随机数(32位时间戳+28字节随机序列),会话ID,加密算法,密钥交换算法,MAC算法等信息发送给服务端。

2 服务端确定本次通信采用的SSL版本,加密套件,随机数,会话ID,并通过Server Hello消息通知给客户端

3 SSL服务端将自己的数字证书或者证书链通过Certificate消息发送给客户端

4 服务器发送Server Hello Done消息给客户端,通知客户端SSL版本和加密套件协商结束,开始进行密钥交换

5 客户端验证服务端证书的合法性,成功后利用证书中的公钥加密客户端随机生成的pre master secret,并通过client key exchange消息发送给服务端

6 客户端发送change cipher spec消息,通知服务端后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。客户端计算已交互的握手信息(除change cipher spec消息外所有已交互的信息)的hash值,利用协商好的密钥和加密套件处理hash值(计算并添加MAC值,加密等),并通过Finished消息发送给服务器,服务端利用同样的方式计算已交互的握手信息的hash值,并和Finished消息的解密结果相比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。

7 同步骤6方法,服务端发送change cipher spec消息,通知客户端后续报文发送将采用协商好的密钥和加密套件进行加密和MAC校验

8 同步骤7,服务器将处理后的数据通过Finished消息发送给客户端,客户端完成处理


双向校验流程

客户端身份验证是可选的,由服务端决定是否验证客户端身份,如果服务端要验证客户端身份,则握手双方除了交互只验证服务端的SSL握手过程中的消息外,还需要:

1 服务端发送server key exchange消息(有些情况下不需要),只有当服务器的证书没有包含必须的数据的时候才发送此消息,此消息包含签名,被签名的内容包括两个随机数以及服务器参数

2 服务器发送certificate request消息,请求客户端将其证书发送给服务端

3 客户端通过certificate消息将携带有自己公钥信息的证书发送给服务端,服务端验证该证书的合法性

4 客户端计算已交互过的握手信息,主密钥hash值,利用自己的私钥对其进行加密,并通过certificate verity消息发送给服务端

5 服务端计算已交互过的握手信息,主密钥的hash值