从https的实现看数字证书、SSL、数字签名、摘要算法、对称/非对称加密

https
https全称Hyper Text Transfer Protocol over Secure Socket Layer,简短点说就是HTTP over SSL。从名词看,他的意思是建立在SSL层之上的HTTP协议,也就是在传输层(TCP)协议和应用层HTTP协议之间加入了一个安全层,使得原本有意义的数据经过加密后传输,保障了用户数据的安全。
HTTPS协议中,使用了SSL传输层和数字证书,从而实现了以下两个功能:
1、由于使用了SSL,建立了信息传输的安全通道,保障了数据的安全,使得客户端和服务端之间可以传输一些敏感信息,如银行交易信息。
2、由于HTTPS协议要求服务器提供数字证书,通过数字证书可以确认网站的真实性,使用了HTTPS的网站,用户会在地址栏中看到一把锁,可以查看网站的认证信息。这里涉及到数字证书的使用原理,下面会详细介绍。
针对上述两个功能,HTTPS采用了以下逻辑进行实现:
1、认证网站的真实性:用户打开HTTPS支持的网站时,服务器向用户提供数字证书。证书上记录了服务器的身份信息,以及后续SSL层需要使用的密钥的公钥,证书上的信息经认证机构通过数字签名的手段标识,浏览器中提前有安装认证机构的根证书,这个证书可以用来验证服务器发来证书的签名的真实性。
2、客户端得到网站的公钥:该公钥同时放在数字证书中,客户端在获取证书的同时获取到公钥,同时保证了公钥的真实性。由该公钥加密的数据只有服务器的私钥可以解读,保障了数据传输的安全。
3、客户端随机生成一个密钥,用于后续页面数据传输时的加密,通过上一步的公钥加密后发给服务器。(这一步需要详细说明一下:A、注意这里产生的密钥是一个对称加密的密钥,和服务器提供的公钥原理不同,服务器的公钥的在传完这个密钥之后,就基本功成身退了。B、SSL实际操作过程中,客户端发送给服务器的不是完整的密钥,完整的密钥是客户端服务器根据这个密钥组装出来的。)
4、通过上一步双方约定了密钥,开始使用密钥加密传输。
以上几个步骤中,使用了多种安全技术,下面会一一解释,主要有:
1、数字证书的概念和实现原理,为什么数字证书可以被上一级证书认证,这里涉及数字签名。数字签名的实现又涉及摘要算法和非对称加密。
2、为什么第二步中,使用网站提供的公钥进行加密后,只有网站的私钥可以解密,这里涉及非对称加密。
3、为什么第三步中,又生成了一个密钥来进行加密,为什么不直接使用公钥?这里涉及对称加密与非对称加密的原理和效率。

作为上面每一个环节都涉及到的重点,我们先看一下加密算法。
非对称加密与对称加密:
对称加密加密与解密用的是同样的密钥,是最快速、最简单的一种加密方式。但对称加密有以下几个问题:
1、任意一端加密的密钥一旦泄露,则整个加密就失去了安全性。
2、加密的密钥自身的传输面临安全问题。
非对称加密使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。相比对称加密,他由于使用了一对密钥,其中私钥是从不外泄的因此有以下优势:
1、因为私钥不需要传输,泄露的可能性极小。
2、公钥本身可以公开传输,因此不存在泄露和安全问题。
但也存在一些不足,主要是加密效率上,相比对称加密需要更大的计算成本和时间成本。
对称加密和非对称加密配合使用,为现在网络安全传输提供了很好的解决方案。
1、每次建立连接时,生成对称加密的密钥。
2、使用非对称加密对密钥进行加密后传输,客户端和服务器进行密钥同步。
3、客户端和服务器端使用对称加密传输实际数据。
由于对称加密的密钥每次连接都不一样,是的泄露的风险大大降低,同时又保障了数据传输的安全性。SSL便是建立在对称加密和非对称加密配合使用的基础上的。
而在https的整个连接建立的过程中,客户端通过获取服务器端的证书获得了服务器的公钥,进行传输。

SSL
SSL是建立在TCP层和HTTP层之间的一层安全协议,在客户端与服务器间传输的数据是通过使用对称算法(如 DES 或 RC4)进行加密的。公用密钥算法(通常为 RSA)是用来获得加密密钥交换和数字签名的,此算法使用服务器的SSL数字证书中的公用密钥。有了服务器的SSL数字证书,客户端也可以验证服务器的身份。
SSL的实现逻辑在上面讲到对称和非对称加密时已经提到。SSL的建立过程如下:
1、客户端发出请求
2、服务端发送证书
3、客户端认证证书
4、客户端生成密钥,加密并发送
5、双发确认密钥已同步,开始交换数据
其中,服务器端可以选择性要求客户端发送证书,客户端则强制要求服务器端发送证书。

上面我们不断提到数字证书,那么数字证书到底是什么?
数字证书可以理解为网络上使用的电子身份证,上面记录了某个主体的信息(比如某网站),通过CA机构数字签名的手段进行了认证。同时,数字证书上记录着一份公钥,这份公钥对于的私钥只有证书的持有着拥有。
1、证书上的数字签名证明了证书的真实性。
2、持有证书上公钥对于的私钥,则实际持有了该证书,可以解密该证书加密的内容。

数字签名是怎么回事,真实性又是怎么保证的呢:
我们从非对称加密中可以发现,私钥的拥有者是唯一的。那么用私钥加密的内容,可以认为只有拥有者可以提供。假设我们知道一个公钥,用它解密出来的内容则一定是私钥的拥有者所加密的,也就是说,这个内容一定是私钥拥有者产生的。那么只要能证明公钥的持有者,就可以证明一封数字内容的持有者了。
“用私钥签名,用公钥认证”。这就满足了一个“签名”被签署和被认证的基本逻辑。
那么是不是要对证书上所有的内容全部用私钥加密来达到签名的效果呢。实际这么做的话,加密成本就太高了。
我们的数字签名实际也不是这么做的,我们需要对需要被签名的内容进行精简,并对精简后的内容进行私钥加密就可以形成签名了,这个精简的过程我们称为“摘要”。这里的这个摘要需要满足以下原则:只要被摘要的内容不一样,则摘要一定不一样。这样一来,证书的内容只需要明文保存,同时进行摘要后用私钥加密形成签名。当我们需要验证证书是,用同样的摘要算法进行摘要,并对签名进行解密,两者一对比,如果一样,说明证书的内容没被改动过。
这个摘要并加密的过程,就是数字签名。这里我们用到了摘要算法,被摘要出来的内容具有固定的长度。

知道了怎么签名,还有一个问题,怎么证明签名的人是权威机构呢?同样的,签名方也需要提供一个自己的数字证书,上面记录着他的信息,其中包含他的上级签名和公钥。这份公钥就是我们用来验证他的签名的。而他的证书上的上级签名,则又是他的上级证书的私钥签署的。所以证书与他的上级之间,就形成了一个相互证明的链。这个链条的最顶端,是一份叫做根证书的证书,根证书没有被签名,我们通过安装根证书来表示对他的信任。

到这里,我们从https出发,介绍了一遍网络安全中的几个概念。对于每一种方法都有不同的实现,下面进行简单罗列:
1、摘要算法:MD5,SHA-1等
2、对称加密:DES,3DES,AES等
3、非对称加密:RSA等







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章