前几天教务系统选课,发现教务系统已经开放了https的链接,终于学校方面也开始用SSL来保证传输的安全性了,这里稍微讲讲一下SSL协议吧~

SSL(Secure Sockets Layer)又称安全套接字层,是一种调用各种加密方法,保证网络通信安全的策略,
我们通常访问网站用的是http协议传输,http协议是明文传输,没有任何加密,所以数据信息很容易被中间人窃听或是劫持,数据的安全性得不到保证,而https则是采用了SSL协议,将传输的数据进行加密,这样就算数据被中间人劫持,也不容易被破解获取,所以现在很多企业都在用https,甚至许多反向代理服务器都有SSL功能。

SSL协议包括两个协议:

SSL记录层协议:

SSL记录层协议提供了对数据封装,压缩,加密的基本支持,建立在TCP协议的基础之上,下面给出SSL记录层协议过程实现图:

SSL记录层协议过程实现图

SSL记录层协议过程的实现:将数据明文切分成多个切片,将每个切片进行压缩(用协商的压缩算法进行压缩),将每个压缩包分别进行MAC计算,得到MAC值,将压缩包和MAC添加在一起,最后添加SSL协议头进行包装。

SSL握手层协议:

这个协议是建立在SSL记录层协议之上的,通过握手层协议,服务端和客户机进行相应的操作,包括身份验证,协商加密算法,协商对称加密密钥。
SSL记录层协议过程实现图

CLient hello阶段:

客户端向服务端传输下列的参数:

客户端支持的TLS/SSL版本号:如TLS1.0,SSL2;
客户端产生的随机数;
客户端支持的加密算法,如RSA(公钥加密);
客户端支持的压缩算法;

服务端接受客户端的参数后,也将一系列参数回传给客户端:

Server hello阶段:

服务端给客户端回传以下参数:

服务端采用的SSL/TLS版本号;
服务端产生的随机数;
服务端提供的加密算法;
服务端提供的压缩算法;
服务端提供的数字证书;

这里稍微提一下,如果是在金融机构这类有认证用户的企业,会要求用户提供对应的客户端证书,这种类似于工商银行的U盾,用USBkey进行用户身份认证,确保发送者是认证客户。

客户端再次回应:

pre-master key 第三个随机数,用于生成客户端和服务端共享的对称密钥;
对应的编码,告诉服务端客户端的握手过程已经结束;

这里客户端的握手过程已经结束,等待服务端生成共享密钥;

服务端回应:

一个共享的用于对称加密的对称密钥;
编码,告诉客户端服务端的握手过程已经结束;

客户端将使用共享的对称密钥对信息进行加密,将加密后的密文用服务端提供的公钥进行二次加密,传输给服务端,服务端用自己的私钥进行解密,再用对称公钥进行解密,得到最终客户端传输的数据信息。

看完这个过程,我们可能会有几个问题:

为何服务端给的公钥要用数字证书进行包装?

如果直接用公钥,那么公钥很可能被三方进行篡改,换成第三方自己的公钥,
拦截客户用该公钥加密传输的信息进行私钥解密即可窃取用户信息,采用数字证书包装,可保证数据的确定性和完整性,如果第三方篡改了数字证书,浏览器会判断这个证书是不受信任的,换言之,用户也就不会将信息进行传输了。

既然私钥是服务端才拥有的,客户端为何不直接用公钥加密传输给服务端?

如果直接用公钥加密(非对称加密)就意味着要对客户端的所有信息量进行加密,如果客户端的信息量很大,那么这个加密过程会耗费相当长的时间,加之服务端解密所耗费的时间,这个过程是难以想象的,而密钥加密(对称加密)的速度要比公钥加密快得多,有的情况甚至快几千倍,先采用密钥加密明文,得到的密文会比原明文缩小了许多,这时用公钥加密会节省很多的时间,而且安全性有过之而无不及。

网站使用SSL协议,保证了数据传输的完整性,安全性,发送者的不可否认性以及发送者的确定性,SSL协议广泛地用在用户登录,网上交易,电子邮件传输等等多个与用户数据相关的业务上,能够确保用户数据不会被轻易地窃取。

以上是自己对SSL协议的一点见解,可能有很多的地方讲得不是很严谨(甚至有些偏差QAQ),希望各位看官请多见谅QAQ

PS:

SSL/TLS运行机制概述,这个讲得很好,作者是阮一峰,他的博客写得很好,大家有兴趣的可以去看看他的博客

由于网络协议方面的东西我不太清楚,而如果要成为一名web工程师,了解http协议,Tcp/Ip协议这些跟计算机网络相关的东西是必要的,然而现在课还是蛮多的,只能利用摸鱼的时间去学习了,以后有时间会写一些关于网络协议方面的博文吧~