SSL(Secure Socket Layer),安全套接层,是一种加密协议,能加密的东西很多,不止Http,还可以是邮件,VPN等。即SSL可以加密Http协议、POP3协议、SMTP协议、VPN等。
HTTPS(HTTP Over SSL),是用基于SSL加密的HTTP。
SSL是私有加密协议。
TLS(Transport LayerSecurity),传输层安全,是公有加密协议。TLS只是对SSLv3做了些修改和增加。
SSL工作在应用层协议和TCP协议之间,用于加密应用层数据。如正常的数据包封装的格式(未使用SSL)是这样的:
现在使用了SSL后,数据包格式变成了这样:
其中,HTTP头及数据,被SSL加密后,作为SSL的数据部分,然后将SSL及加密后的数据,一起做为TCP的数据部分。这样整个TCP的数据部分都是加密过的,因此也就保障了TCP数据部分的安全性。在发送端加密,然后在接收端解密(解密在与发送端的对等层)。
即
SSL保障的是传输层数据的安全,即TCP的数据部分的安全(TCP数据部分是经过加密的),因此SSL是传输层安全。
IPSecVPN工作在IP层与TCP层之间,对于正常的数据包格式如:
经过IPSec VPN加密后,数据包格式变为:
IPSec VPN是加密整个TCP数据包(包括TCP头和数据部分),然后加上IPSec头部,将数据包交由IP层进行转发。在发送端加密,在接收端解密(解密在与发送端的对等层)。
IPSec VPN保障的是IP层的数据安全,即IP层数据部分的安全(整个IP层的数据包都是经过加密的),因此IPSec VPN网络层安全。
SSL和IPSec VPN的区别只是加密的地方不同而已。
SSL连接建立及数据传输过程:
(上述过程可在fiddler4抓Http包进行分析)
第1个包(客户端到服务端),ClientHello,告诉接服务器,我是什么浏览器,我支持哪些算法。
第2个包(服务端到客户端),ServerHello,告诉客户端,所选择的算法,证书(证书中包含server的公钥)。
第3个包(客户端到服务器),客户端使用第二个包中的服务器的公钥加密随机产生的密钥(客户端的),得到一个密钥包,将该包交给服务器,服务器使用服务器的私钥进行解密;ChangeCliperSpec,密钥变更说明包,该包告诉服务器,从该包后面的所有包,我开始加密了,你就准备解密。相当于告诉服务器,该包及以前的包,都是明文的,但该包以后的包,都是密文的。
第4个包(服务端到客户端),ChangeCliperSpec,密钥变更说明包,该包告诉客户端,从该包后面的所有包,我开始加密了,你就准备解密。相当于告诉客户端,该包及以前的包,都是明文的,但该包以后的包,都是密文的。
第5个包(双向),双方收发密文包。
第6个包,关闭通知包。
(上面的这些包,每一个包,都可能被拆分为多个TCP包,也可能不拆分)
使用SSL加密,可以使用stunnel打通隧道,然后再使用netcat进行收发数据,即是加密的。