ssl安全协议讲解 (ssl协议怎么升级)

《实战录》导语

云端卫士的新栏目《实战录》将会定期分享一些我们的工程师伙伴们在产品研发的过程中总结的实践经验,希望对于热爱技术且关注安全领域的受众有所裨益。本期分享人为云端卫士运营工程师杨丛聿,将带来关于SSL协议的一些观点与分析。

信息的安全传输曾困扰着一代又一代的人,提到信息加密,也许你会想到电影《模仿游戏》中的Enigma,德国那款基于替换加密技术的密码机,曾将人工智能的鼻祖图灵都难住了。在当时的计算能力下,Enigma的破解难度之大毋庸置疑,但是随着计算机运算能力的几何式增长,很多曾经看上去绝对安全的加密技术都早已不再安全,随之而来的是对于加密技术的更高要求。

ssl协议提供的基本安全服务,ssl协议入门教程

可以说互联网的发展与密码学是息息相关的,毕竟没有人希望自己的信息被陌生人获取,也正是出于这种考虑,我们上网过程中会在不经意间经历了无数次的加密。提到SSL协议,也许很多人会很陌生,然而提到百度、淘宝你便不再有任何陌生感,当你注意下所访问域名前那个https,便和SSL拉进了距离。也许登陆12306时你曾对这样的弹窗无所适从,当然这也是SSL的产物,接下来将为你介绍SSL协议的一些细节。

ssl协议提供的基本安全服务,ssl协议入门教程

那么什么是SSL协议呢?SSL(Secure Sockets Layer)中文名称安全套接字协议,是网络安全通信的重要基石。最初由网景公司(Netscape)设计,主要用来保证网络通信的机密性、认证性以及完整性,在网景公司它经历了SSL 1.0、SSL 2.0、SSL 3.0三个版本的变迁。后来由互联网工程任务组(IETF)接管,并更名为TLS(Transport Layer Security),发展至今已有TLS 1.0、TLS1.1、TLS1.2这几个版本。

加密与数字证书

既然是一种安全协议,那么对于密码技术的依赖是不言而喻的。首先为你介绍三种主要的信息加密技术。

ssl协议提供的基本安全服务,ssl协议入门教程

看到这一大堆英文简写,也许很多人都晕菜了,那么接下来为你简要介绍这三种加密算法的基本原理和用途。

1)首先是对称加密算法,顾名思义,它的加密和解密密钥是相同的。这种算法的优点是算法简单,加/解密速度快,适用于加密大量数据。缺点也很明显,每组用户都要有维持一个密钥,而且一旦密钥泄露,消息自然也被破解了。

ssl协议提供的基本安全服务,ssl协议入门教程

2)接下来是非对称加密算法,可以看出,这里用到的密钥不再是之前的一个了,而是在加密和解密时使用不同的密钥,具体的通信流程如下:

a)乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开;

b)得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方;

c)乙方用自己保存的私钥对加密后的信息进行解密。

同理,如果乙要回复加密信息给甲,那么乙需要使用甲的公钥加密,甲用自己的私钥解密。对于非对称密钥算法而言,其算法复杂,相对而言比较耗时,且破解难度大,只适合对少量数据进行加密。

ssl协议提供的基本安全服务,ssl协议入门教程

3)最后是信息摘要算法,可以把它简单的理解为一串信息的唯一性标识,就像信息的“身份证”一样。

各种加密技术就简单介绍到这了,当然具体涉及到各种加密算法的实现肯定不会这么简单,会涉及到一大堆的数学公式。介绍完这么多算法,那么他们到底在SSL中有什么用呢?为此首先介绍一下数字证书,数字证书正是结合使用了上述的非对称加密和信息摘要算法。

那么问题来了,如何确保自己访问的网站没有遭到劫持呢?数字证书正是出于这方面的考虑应运而生的,数字证书是互联网通讯中标识各方身份信息的一串数字,其功能就像网络通讯各方的“身份证”一样。

那么问题又来了,如何确保这个“身份证”是有效的呢?这便涉及到了数字证书由谁签发的问题,只有由大家都认可的机构签发的证书才是靠谱的,这个机构便是CA(Certificate Authority)。当然你也可以自己制作证书,毕竟除了“身份证”,在公司内我们可能还有“工卡”来标识身份。

ssl协议提供的基本安全服务,ssl协议入门教程

生成的证书将用来在SSL握手阶段验证网站身份,此时可以回到之前如何确保所访问网站是否遭到劫持的问题,通过https协议访问网站时,浏览器将通过事先导入的可信任证书链帮我们确认网站是否靠谱。如果该网站不在可信任证书链中,就会出现如12306那样的弹出页,这时如果你不想再看到这个页面,导入12306的根证书便可。

SSL协议 SSL/TLS协议位于网络层和传输层之间,可分为两部分:

1)记录协议(SSL/TLS Record Protocol):建立在可靠传输协议之上(如TCP),该协议为高层协议提供数据封装、压缩、加密等基本功能的支持;

2)握手协议(SSL/TLS Handshake Protocol):建立在SSL/TLS记录协议之上,主要用途是实际数据传输开始前:验证通讯双方身份、协商加密和MAC算法、交换加密密钥。

握手阶段是SSL协议的核心部分,流程如图:

ssl协议提供的基本安全服务,ssl协议入门教程

第一步:客户端向服务器发出加密通信的请求,即ClientHello请求,包括以下内容

会话ID

客户端支持的协议版本(如TLS 1.0)

一个客户端生成的32字节随机数(稍后用于生成会话密钥)

客户端支持的密码套件列表(如SSL_DHE_RSA_WITH_DES_CBC_SHA)

DHE_RSA密钥交换算法(用于服务端公钥交换)

DES_CBC数据加密算法(数据通信时使用)

SHA散列算法(用于验证服务端数字证书的完整性)

客户端支持的压缩方法(如zlib、deflate)

一个客户端生成的32字节随机数(4字节的当前GMT UNIX时间+28个随机字节)

第二步:服务器收到客户端请求后,向客户端发出回应,该阶段主要分为两部分

第一阶段回复SeverHello,包括内容

会话ID

确认使用的加密通信协议版本(如TLS 1.0)

一个服务器生成的32字节随机数

从客户端的密码套件列表中选择的一个密码套件

从客户端的压缩方法的列表中选择的压缩方法

第二阶段分为四步:

1)服务器证书(可选):服务器将公钥的数字证书(包含了公钥及其数字签名)、到根CA的证书链发给客户端;

2)服务器密钥交换(可选):这里视密钥交换算法而定;

3)证书请求(可选):服务端可能会要求客户提供客户端证书用以验证身份,比如,金融机构向正式客户提供的USB密钥里就包含了一张客户端证书;

4)服务器握手结束通知。

第三步:客户端收到服务器响应后,首先对服务器证书进行验证,验证主要分为两部分:

1)使用信息摘要算法来检验数字证书的完整性;

2)客户端浏览器会事先导入可信任的证书链,之后可通过PKI来验证服务器CA证书链的有效性。

验证失败向访问者显示一个警告,由其选择是否还要继续通信,造成验证失败的可能因素包括:证书不是可信机构颁布、证书中的域名与实际域名不一致、证书已经过期等。

如果证书没有问题,客户端就会从证书中取出服务器的公钥,并向服务器返回信息:

1)客户端证书(可选):如果服务器之前发出了证书请求

2)客户端密钥交换:返回一个用服务器公钥加密的随机数,密钥交换算法由之前的协商确定。

3)证书验证(可选),对预备主密钥的随机数进行签名,证明拥有a)步证书的公钥

4)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送

5)客户端握手结束通知,表示客户端的握手阶段已经结束

第四步:服务器生成本次会话所用的"会话密钥",并向客户端最后发送以下信息:

1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送

2)服务器握手结束通知,表示服务器的握手阶段已经结束

密文的破解有着极高的时效性,所以对于破解而言最大的敌人永远是随机性,SSL协议便对随机数有着极高的依赖。由于SSL协议中证书是静态的,因此有必要引入一种随机因素来保证协商出来密钥的随机性,握手过程中会产生3个随机数,用于在两端生成相同的对称

会话密钥,该密钥用于之后通信数据的加密。

结语

使用SSL就一定安全了吗?答案当然是否定的,通常来讲,SSL协议本身能帮助我们更安全的畅游互联网,然而近几年也曾曝出过不少SSL方面的安全漏洞,不过大多都是实现库的问题,最出名的当属2014年4月的OpenSSL“心脏滴血”漏洞。

另一方面,SSL本身也可能作为DDoS攻击的对象,THC SSL DOS便是针对SSL的握手过程。由于建立一个SSL连接,服务器所需要的处理能力远高于客户端,利用这个不对称性,可通过少量的客户端迅速耗尽服务器资源。由此可见DDoS攻击无处不在,做好防护是各大网站保证自己可用性的重点对象。