首页 > 编程知识 正文

set安全协议的工作原理(SSL/TLS工作原理)

时间:2023-05-04 10:40:50 阅读:124107 作者:3865

转载: https://珠兰.智惠.com/p/36981565

为了确保网络通信的安全性,需要对在网络上传输的数据进行加密。 目前主流的加密方法是安全套接字层(SSL )、TLS (transportlayersecurity )。 后者比前者稍新,但通常指SSL和TLS。

首先,假设在a和b之间进行网络通信,我们来回顾一下网络通信加密的发展过程。

http://www.Sina.com/http://www.Sina.com /

远古时代自然民风淳朴,路不拾遗,夜不闭户。 A向B发送数据,完全不用担心窃听和篡改,直接发送即可。

http://www.Sina.com/http://www.Sina.com /

随着时代的发展,渐渐有了c这种人。 c不仅拦截a与b之间的网络数据,还拦截a与b之间的数据,将其伪造后发送给a或b,欺骗a与b。 c是中间人攻击(Man In The Middle Attack )。

为了应对c的攻击,a和b开始加密自己的数据。 a和b使用共享密钥。 a在发送数据之前,用这个密钥加密数据。 b在接收到数据后,用这个密钥解密数据。 因为解密加密时使用相同的密钥,所以这里的加密算法称为远古时代

1981年,有人提出了数据加密标准(des )。 这是对称加密算法。 DES使用56位密钥完成数据加密。 56位看起来有点短,但时间毕竟是古代的时代,56位已经足够了。 就这样,网络数据的加密开始了。

因为采用了DES,所以a和b现在不用担心数据会被c监听。 因为即使c拦截,也只能获取加密的数据,没有密钥就无法获取原始数据。

但是,a和b之间还有一个新问题。 他们需要共享的56位密钥,该密钥必须保密。 否则,c会拿走,没有加密的意义。 首先,AB无法通过网络传递密钥。 因为在密钥确定之前,所有网络通信都是不安全的。 如果通过网络传递密钥,密钥可能会被拦截。 如果拦截了,就没有加密的意义。 为了安全,a和b只能先见面,商量私钥。 那样的话,c就拿不到密钥了。 如果因为什么原因,前面的钥匙泄露了,AB必须再见面,再商量一次钥匙。

现在a和b之间,最私人的信息是这把钥匙。 只要保证密钥安全,AB之间的整个网络通信就安全了。

http://www.Sina.com/http://www.Sina.com /

A和b小心地保护着钥匙不让c知道。 但是路高一尺,魔高一丈。 随着技术的发展,计算机的速度非常快,现在可以通过暴力解密DES加密的信息来进行解密。 不是56位的键吗? c找到一台好计算机,尝试所有可能的值,总是找到密钥并解密a和b之间的加密信息。 相反,不能说DES没有考虑到这种情况。 不过,在古代,计算机并不是很快,破译56位密钥需要很长时间。 但是,现在是中古时代,也许几天就能破译56bit的密钥。

为了应对这一点,提出了triple-DES (最大168bit的密钥)、AES (最大256bit的密钥)等新协议。 经过这些改进,至少在可以预料到的未来,计算机无法在有限的时间内暴力破解这个长度的密钥。 因此,在中古时代,延长对称加密算法的密钥长度,以应对中间人攻击。 但是a和b还是需要见面商量私钥。

http://www.Sina.com/http://www.Sina.com /

--

时间到了现代。 网络通信非常发达,a不仅与b通信,同时与其他10000人进行网络通信。 a每个人都不能去见他们和他们商量钥匙。

因此提出了一种新的加密算法。 这就是不对称密码算法。 不对称加密使用两个密钥:公共密钥和私有密钥。 通过特殊的数学算法,对数据加密和解密使用不同的密钥。 因为使用了不同的密钥,所以被称为上古时代。 不对称加密最有名的是RSA算法,它以发明人Rivest、Shamir和Adleman命名。 非对称加密算法中的公共密钥和私有密钥在数学上是相关的,一方面可以加密,另一方面可以解密。 然而,尽管相关,现有的数学算法不能从一个密钥中计算另一个密钥。

非对称加密的优点在于,a保存了私有密钥,可以通过网络传递公共密钥。 这样,即使public key被c截取,由于没有private key,所以c不能完成信息的解读。 如果c不怕知道公共密钥,那么现在a和b不用再见面商量密钥了,直接通过网络传递公共密钥就可以了。

具体而言,a和b分别有public key和private key,这些key是基于对应算法生成的。 私有密钥只保留在各自的本地。 公共密钥会传达给对方。 A给你

B发送网络数据,那么A先使用自己的private key(只有A知道)加密数据的hash值(感谢 

@灵剑

 指正,评论区有说明),之后再用B的public key加密数据。之后,A将加密的hash值和加密的数据再加一些其他的信息,发送给B。B收到了之后,先用自己的private key(只有B知道)解密数据,本地运算一个hash值,之后用A的public key解密hash值,对比两个hash值,以检验数据的完整性。

在这个过程中,总共有4个密钥,分别是A的public/private key,和B的public/private key。

如果B的解密结果符合预期,那么至少可以证明,这个信息只有B能获取,因为B的private key参与了解密,而B的private key其他人都不知道。并且,这个信息是来自A,而不是C伪造的,因为A的public key参与了解密。一切看起来似乎很美好。

 

非对称加密的安全隐患

但是在一切的最开始,A和B要通过网络交换public key。如果C在中间拦截了呢?假设有这种情况,C拦截了A和B的public key,又分别用自己的public key发给A和B。A和B并不知道,他们还以为这个public key来自对方。当A给B发消息时,A先用自己的private key加密数据的hash值,之后用C传来的假的public key加密数据,再发出去。C拦截到之后,先用C自己的private key解密数据,C就获取了A的原始信息!之后,C可以篡改数据内容,再用自己的private key加密数据的hash值,用之前拦截的B的public key加密数据,再发给B。B收到以后,先用自己的private key解密数据,再用C传来的假public key解密hash值,发现匹配。这样,B收到了一条来自C的假的信息,但是B还以为信息来自于A。中间人攻击仍然可能存在!

完了,一切都崩了,加密搞的这么复杂,居然还不能保证网络数据的安全。回顾一下,问题出就出在最开始通过网络交换public key。看起来为了保证public key不被拦截,A和B似乎还是要见一面,交换一下public key。这一下就回到了上古时代。

不过,虽然A和B现在还是要见一面,但见面的实质已经变了。在上古时代,见面是为了商量一个密钥,密钥的内容很重要,不能让别人知道密钥的内容。而在现代,见面是为了确认public key的真实性,public key的内容是可以公开的。

那如果有其他办法能保证public key的真实性,A和B是可以不用见面交换public key的。

 

CA

现实中,通过CA(Certificate Authority)来保证public key的真实性。CA也是基于非对称加密算法来工作。有了CA,B会先把自己的public key(和一些其他信息)交给CA。CA用自己的private key加密这些数据,加密完的数据称为B的数字证书。现在B要向A传递public key,B传递的是CA加密之后的数字证书。A收到以后,会通过CA发布的CA证书(包含了CA的public key),来解密B的数字证书,从而获得B的public key。

但是等等,A怎么确保CA证书不被劫持。C完全可以把一个假的CA证书发给A,进而欺骗A。CA的大杀器就是,CA把自己的CA证书集成在了浏览器和操作系统里面。A拿到浏览器或者操作系统的时候,已经有了CA证书,没有必要通过网络获取,那自然也不存在劫持的问题。

 

现在A和B都有了CA认证的数字证书。在交换public key的阶段,直接交换彼此的数字证书就行。而中间人C,还是可以拦截A和B的public key,也可以用CA证书解密获得A和B的public key。但是,C没有办法伪造public key了。因为C不在CA体系里面,C没有CA的private key,所以C是没有办法伪造出一个可以通过CA认证的数字证书。如果不能通过CA认证,A和B自然也不会相信这个伪造的证书。所以,采用CA认证以后,A和B的public key的真实性得到了保证,A和B可以通过网络交换public key(实际是被CA加密之后的数字证书)。

除非有种情况,A内置的CA证书被篡改了,例如A使用了盗版的系统,“优化”了的非官方浏览器,或者被病毒攻击了,那这个时候,A有可能会认可非CA认证的数字证书,C就有机会发起中间人攻击。所以,用正版至少是安全的。

 

实际使用

非对称加密算法比对称加密算法要复杂的多,处理起来也要慢得多。如果所有的网络数据都用非对称加密算法来加密,那效率会很低。所以在实际中,非对称加密只会用来传递一条信息,那就是用于对称加密的密钥。当用于对称加密的密钥确定了,A和B还是通过对称加密算法进行网络通信。这样,既保证了网络通信的安全性,又不影响效率,A和B也不用见面商量密钥了。

所以,在现代,A和B之间要进行安全,省心的网络通信,需要经过以下几个步骤

通过CA体系交换public key通过非对称加密算法,交换用于对称加密的密钥通过对称加密算法,加密正常的网络通信

这基本就是SSL/TLS的工作过程了。

 

HTTPS

HTTPS全称是HTTP over SSL,也就是通过SSL/TLS加密HTTP数据,这或许是SSL最广泛的应用。

前面提到了CA作为一个公证机构,能确保数字证书的真实性。但是在实际使用中,CA认证一般是要收费的,如意的小松鼠不会去做CA认证,进而获得属于自己的数字证书。更多的是,一些大的机构,例如银行,网店,金融机构,它们去获得自己的数字证书。那这种情况如何保证网络通信的安全呢?

这些机构获取到CA授予的数字证书之后,将数字证书加到自己的web服务器上。当用户要去访问它们的网页,例如https://domain.com,会经过下图所示的步骤。

 

用户向web服务器发起一个安全连接的请求服务器返回经过CA认证的数字证书,证书里面包含了服务器的public key用户拿到数字证书,用自己浏览器内置的CA证书解密得到服务器的public key用户用服务器的public key加密一个用于接下来的对称加密算法的密钥,传给web服务器 因为只有服务器有private key可以解密,所以不用担心中间人拦截这个加密的密钥服务器拿到这个加密的密钥,解密获取密钥,再使用对称加密算法,和用户完成接下来的网络通信

现在用户知道自己访问的网站是正规的网站,否则用户浏览器会报错说不能用CA证书解析。服务器通过CA授予的数字证书自证了身份。但,这里的安全隐患在于,服务器怎么知道访问者就是真用户呢?之前介绍的双向认证是可以通过数字证书验明用户的正身,现在用户为了省钱没有数字证书。这种情况下一般是通过用户名密码来确认用户。所以,大家要保管好自己的密码。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。