TLS(transport layer security)协议的工作过程及协议特性

TSL协议

wikipedia上对TLS的解释:

Transport Layer Security (TLS), and its now-deprecated predecessor, Secure Sockets Layer (SSL),are cryptographic protocols designed to provide communications security over a computer network.

翻译过来是:

TLS及其现已被弃用的前身SSL,是为计算机网络提供通讯安全性的加密协议。

先看一下TSL协议的工作过程,之后再分析其内部握手机制,看其是如何保证数据的保密性和安全性的

TSL工作过程

以Amazon(代替Bob)和一个买家(代替Alice)为例。

就像其他任何合法的电子商务卖家一样,Amazon也向一个可信任的证书颁发商申请了一份证书。买家使用的是Internet Explorer浏览器,其中嵌有可信任证书颁发商的公钥。买家并不需要真正了解TSL的工作原理,也不需要拥有公钥或者私钥。他只需要确保在输入重要的资料时,例如信用卡号码时,用HTTPS代替HTTP协议即可。这个必须显示在地址栏中的。因此,不要用http://www.amazon.com,而是必须用https开头,例如:https://secure.amazon.com。有些浏览器还会在地址栏中显示一个加密图标。

当买家输入一个加密页面(当他购物完成时),在后台中,这个浏览器和Amazon服务器之间会发生以下一系列事件。

浏览器:你真的是Amazon.com吗?

服务器:是的,这是我的证书。

然后,浏览器会利用证书颁发商的公钥进行解密,来验证证书的有效性。如果有哪里不对,例如证书过期,浏览器就会向用户发出警告。如果用户不顾证书过期,同意继续,浏览器就会继续。

浏览器:光有证书还不够,请再发点别的身份证明给我。

服务器: 我真的是Amazon.com+[这条信息用Amazon.com的私钥加密过的摘要]。

浏览器利用Amazon的公钥对消息摘要进行解密,并为“我真的是Amazon.com”创建一条消息摘要。如果两者匹配,表示验证成功。随后,浏览器就会产生一个随机密钥,利用Amazon的公钥对它进行加密。这个随机密钥将用于对后续的消息进行加密和解密。换句话说,一旦完成对Amazon的验证,就会采用对称加密,因为它的速度比非对称加密要快得多。除了消息之外,双方还要发送消息摘要,以确保这些消息是完整的,没有被修改过。

 

整体流程图

注:此种情况下是使用非对称加密方式来交换对称加密的密码

比如说client发送一个hello,server就将其公钥发送给client

client在自己内部生成了一个对称加密的密码,用公钥进行加密,发送给server。

server拿到这个密文,用私钥解密,就拿到了这个对称加密的密码了

问题:没有前向保密性

假设现在有一个中间人,其还没有破解服务器的私钥,但是其开始抓包,直到有一条其破解成功了,那么所有之前抓的包就全部解开了。

TSL协议的特性及实现

有下面三大特征:

1. 加密/解密:加密过的信息对第三方隐藏了信息。只有既定的接收方才能对信息进行解密。

2. 验证:验证是证明某个实体是否为它所声明的那一个

3. 数据完整性:在互联网上发送的信息要传过许多计算机,因此必须确保所发送的数据没有被修改过,并且是完整的。

以Alice和Bob为例

加密/解密

假设Alice想要与Bob进行通信,Bob有一个公钥和一个私钥。Bob要将他的公钥发给Alice,Alice就可以用它对要发给Bob的信息进行加密。只有Bob能够对这些信息进行解密,因为他拥有对应的私钥。为了将信息发送给Alice,Bob要利用他的私钥进行加密,Alice就可以用Bob的公钥进行解密。

但是,除非Bob能够亲自见到Alice并把他的公钥交给她,否则这种方法就很不完善了。但凡拥有密钥对的人们都可能声明自己是Bob,Alice根本无法查证。

比如下面的这种中间人劫持

中间人劫持的手段非常高明,其既可以伪装为客户端,对服务器的数据进行劫持,也可以伪装为服务器,对客户端的数据进行劫持。

其可以在发起TSL连接、进行握手时就可以对客户端向服务器发的数据包进行劫持,并且对服务器发送给客户端的数据包进行劫持,如中间人不发送客户端的公钥,而是发送了自己的公钥,那么客户端浏览器拿着中间人的公钥来加密对称密码,中间人就可以解密获取对称密码,从而获取客户端发送的数据。

 

如何解决这个不完善的点呢?使用下面的验证机制。

验证

在TSL中,验证是通过引入证书来解决的。证书包含以下内容:

1. 一个公钥

2. 相关主题的信息,如公钥的所有者

3. 证书颁发商的名称

4. 某种时间戳,使证书过了一定的时期之后会过期

 

证书最为关键的是,必须通过可信任的证书颁发商进行数字签名,例如VeriSign或者Thawte。

签名的真正目的是要确保文档/文件没有被篡改

对一个文档进行签名,要包括创建文档的摘要信息,并利用颁发商的私钥对摘要进行加密。为了查看这个文档是否仍然保持原封不动,要执行以下两个步骤:

I. 利用签署者的公钥对文档的摘要信息进行验签。你很快就会学到,可信任证书颁发商的公钥是很容易获取到的

2. 给文档创建摘要信息。

3. 将上述第1步和第2步的结果进行比较。如果这两个结果匹配,则表示文件没有被篡改。

这种验证方法之所以可行,是因为只有私钥的所有者能够对文档摘要进行解密,并且这个摘要信息也只能通过对应的公钥进行解密。假如你能确定自己拥有的是原版的公钥,那么就会知道这个文件有没有被修改过。

 

由于证书可以通过可信任的证书颁发商进行数字签名,因此人们可以将他们的证书供大家公开下载,而不是采用他们的公钥。

 

证书颁发商会有一对公钥和私钥。申请证书时,Bob必须生成一对密钥,并将其公钥发给证书颁发商,随后证书颁发商就会请Bob发一份护照或者其他身份证明给他,由此证明Bob的身份。对Bob 完成验证之后,证书颁发商就会用它的私钥对证书进行签名。

 

证书只能利用证书颁发商的公钥才能解读。证书颁发商的公钥一般很容易下载到。例如,Internet Explorer、Netscape、Firefox 和其他浏览器都默认包含几家证书颁发商的公钥。

 

现在,有了数字证书之后,Bob在与别人交换信息之前,可以先发布他的数字证书,而不是发布他的公钥了。

 

其工作流程如下:

A->B Bob ,你好!我要跟你通话,但我需要先确认一下你是否真是Bob 。

B->A 当然可以,这是我的证书。

A->B 这些还不够,我还需要你其他的身份证明资料。

B->A Alice,[真的是我+用Bob的密钥加密过的信息摘要]。

在Bob发给Alice的最后一条消息中,也就是用Bob的私钥进行签名的那条消息,可以向Alice证明这条信息是可信的。这就是验证的过程。

Alice联系Bob, Bob将其证书发过去。但是,光有证书还不够,因为任何人都可能得到Bob的证书。别忘了,Bob 可是将他的证书发给所有想要与他通信的人啊!因此,Bob还要给她发送一条消息(Alice,真的是我)并附上用Bob的私钥对这条信息进行过加密的摘要。

 

Alice从证书中获得Bob的公钥。这个她可以做到,因为证书是利用证书颁发商的私钥签名的,Alice可以访问证书颁发商的公钥(她的浏览器上就有一份)。现在,她又收到一条消息,以及用Bob私钥加密过的摘要。Alice只要给这条消息创建一个摘要,并将它与Bob发给她的加密摘要进行对比即可。Alice之所以能够解密,是因为它是用Bob的私钥加密的,而Alice又有一份Bob的公钥。如果两者匹配,Alice就可以确定对方就是真正的Bob。

中间人在这种情况下就无法伪造公钥了,因为中间人需要发送CA签名证书,如果其发送的是篡改后的CA证书(如把自己的公钥写到了证书里面),其在客户端验证是通不过的。所以其只能要发送真正的CA证书,因为客户端浏览器使用的是真是的证书颁发者的公钥,那么这样就会获得真是的Amazon的公钥。

对于下一步,中间人也是无法进行劫持的。服务端发送  我真的是Amazon+[这条信息MD5的私钥签名], 中间人不知道Amazon的私钥,所以没有办法伪装了,因为即便其伪装,到客户端浏览器这里,也会识别出其是伪装的服务器。所以其只能看到双方商量好对称密码,而自己却只能获得加密后的数据包,无法解密了

 

Alice对Bob完成验证之后,第一件事就是发送一个加密密钥,这个将在接下来的信息交流中使用。是的,一旦建立起了加密渠道,TSL就会采用对称加密法,因为它的速度要比不对称加密法快得多。

 

这里还漏掉了一件事情没有交代。互联网上的信息是要在许多计算机上传递的,那么你如何确保那些信息的完整性呢?因为在传输途中,任何人都可能截获那些信息啊。

 

数据完整性

假设Mallet是一个怀有恶意的人,他很可能就坐在Alice和Bob之间,试图破解正在传递的信息。令Mallet遗憾的是,虽然他能够复制到信息,但是因为进行过加密,他并不知道密钥。但Mallet仍然可能破坏信息,或者不转播其中的某一个部分。为了解决这个问题,TSL 引用了一个消息验证码(Message Authentication Code , MAC)。MAC是通过一个密钥和一些传输数据计算出来的一组数据。由于Mallet不知道密钥,因此他无法算出摘要的正确值。信息的接收者则可以,并且因此可以发现是否有人试图破坏数据,或者发现数据是否不完整。如果答案是肯定的,那么双方可以停止通信。

这类信息摘要算法之一为MD5,非常安全。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值