网络安全与Https原理解析

http协议是如今网络通讯中最经常使用的协议之一,可是因为http协议自己并无考虑网络安全方面的问题,所以不少基于http协议的应用都存在安全隐患。所以,咱们有必要了解这些安全问题及解决方法,以保证咱们的应用安全稳定的运行。本文简单的介绍了网络通讯中存在的常见问题和以及解决这些问题的一些技术,并简介了https协议的工做原理。算法

http协议存在的安全问题

http协议自己是基于tcp/ip协议的,所以传输的数据极可能会在某个网络节点被他人截获,并且http自己并无考虑通讯时的一些安全问题,所以,在使用http协议进行通讯时会存在不少安全隐患,归纳的来讲,这些安全问题能够分为如下几种:浏览器

  • 信息保密性没法获得保障:在使用http协议进行通讯时,数据是以明文传输的,这也就意味着发送的信息若是中传输途中被他人截获时,他人能够直接读取到信息中的内容。好比下图中,客户端向服务器发送密码,中途被窃听者截获,窃听者可直接读取到密码内容。

密码被截获.png

  • 没法保证信息的完整性:当信息在传输过程当中被截获时,别人能够修改信息中的内容,咱们没法肯定最终送达的信息和发送时是一致的。好比下图,客户端原本向服务器发送的内容是“今天是晴天”,结果中途被窃听者篡改,到达服务器的内容变成"今天是阴天"

修改传输的内容.png

  • 没法验证信息发送者的身份:没法肯定和咱们进行通讯的一方的真实身份,可能与咱们进行通讯的一方是黑客假装的

通讯对象是假装的.png

网络安全中经常使用的技术

加密算法

为了解决网络通讯中的安全性问题,咱们通常会使用加密算法对传输的数据进行加密。加密算法通常分为对称加密和非对称加密:安全

  • 对称加密:使用单一的秘钥进行加密,同一个秘钥既能够对信息进行加密,也能够对信息进行解密,经常使用的对称加密有如下几种:
    • DES:使用56位秘钥,速度较快
    • 3DES:3DES自己也是使用的DES算法进行加密,只不过3DES使用2或3条56位的密钥对数据进行三次加密。过程以下:
    加密过程:key1加密->key2解密->key3加密 解密过程:key3解密->key2加密->key1解密
    • AES:是美国联邦政府采用的一种区块加密标准,用来替代原先的DES,使用12八、192或256位秘钥进行加密,是如今最经常使用的对称加密技术。

与非对称加密相比,对称加密最大的优势是执行速度快,秘钥便于管理,可是因为对称加密在加密和解密时使用的是同一个秘钥,所以如何在互联网上安全的分发秘钥是非对称加密最大的问题,虽然使用非对称加密能够对传输的内容进行加密,却没法保证秘钥在传输途中不被截获服务器

  • 非对称加密:对数据进行加密和解密时所用的秘钥是不一样的,通讯的双方各自持有本身的公钥和私钥,A向B发送数据,A使用B的公钥进行加密,那么B只能使用本身的私钥才能进行解密,反之,若是B向A发送数据,那么B须要用A的公钥进行加密,A则须要用本身的私钥进行解密。经常使用的非对称加密算法有如下几种:
    • RSA:RSA是如今使用最普遍的公钥加密体制,一般使用512位以上的秘钥,计算量庞大,难以被破解
    • ECC:椭圆曲线算法

因为非对称加密的公钥是能够公开的,解密时所需的私钥无需再互联网上分发,所以非对称加密相对来讲更加安全。且非对称加密使用的秘钥长度通常较长,破解难度相对较大,但也致使非对称加密的执行速度较慢,不适合对大量数据进行加密。markdown

  • 数字信封技术:数字信封是综合运用对称加密和非对称加密的一种技术,因为对称加密和非对称加密各有优劣,所以数字信封技术使用对称加密对传输的内容进行加密,并将对称加密所用的秘钥进行非对称加密,这样既保证了加密的效率,又保证了秘钥的安全。

数字信封.png

信息摘要

虽然使用加密技术可以保证解惑者没法直接读取到截获的内容,但却没法解决数据在传输过程当中被篡改的问题。若是数据在传输过程当中被黑客篡改,而后黑客也使用相关的加密技术对被篡改的数据进行加密,那么最终接受者在获取到数据时,依然没法判断拿取的数据是否已经遭到篡改。网络

咱们一般使用信息摘要算法来解决数据的完整性问题。摘要算法采用单向Hash函数将需加密的明文"摘要"成一串固定位数的密文,当原文内容发生改变时,计算获得的摘要信息也会变得不一样。发送者同时将原文和原文的摘要发送给接受者,接受者接收到数据后,再用一样的摘要算法对获取的原文内容进行计算,而后用获得的特征信息和发送来的特征信息进行比较,若是相同,说明数据没有被篡改。 使用信息摘要验证完整性.pngtcp

经常使用的信息摘要算法以下:函数

  • MD5:一种被普遍使用的密码散列函数,能够产生出一个128位的散列值
  • SHA-1:能够生成一个被称为消息摘要的160位散列值,散列值一般的呈现形式为40个十六进制数

数字签名

虽然使用信息摘要能够保证传输数据的完整性,可是若是发送的数据和信息摘要都被黑客截获并修改,那么最终接受者仍然没法辩解获取的数据是否和最初的发送者是否一致。为了解决这个问题,就要使用数字签名技术。网站

使用数字签名技术能够验证数据发送方的身份,本质上也是使用的非对称加密算法:A向B发送数据,A先使用本身的私钥进行加密,获得一串数字签名,而后将本来的数据和数字签名同时发送给B,B拿到发送来的数字签名后,若是想要对数字签名进行解密,就只能使用A的公钥进行解密,若是解密成功,就说明获得的数据确实是A发送的。加密

数字签名一般和信息摘要技术配合使用,通常将计算出的信息摘要在进行数字签名,这样即便数据在发送途中被黑客截获,因为黑客没法获得本来发送者的私钥,也就没法对篡改后的数据进行签名,这样既保证了数据的完整性,也验证了发送者的身份。

数字证书

使用加密算法、信息摘要和数字签名技术以后,虽然数据的保密性、完整性以及同新方身份的验证都有了必定的保障,可是假如与咱们进行通讯的一方自己就是他人假装的,这样前面使用的加密、信息摘要和数字签名就都没有意义了,为了解决这个问题,就要用到数字证书技术。https之因此更加安全,很大程度上是由于https协议使用了数字证书技术。

简单的来讲,数字证书就如同咱们的身份证通常,当咱们同某我的进行交流的时候,如何肯定对方确实是咱们想要交流的那我的?只须要让对方出示他的身份证便可。而身份证是由政府发放的,政府做为权威机构保证身份证的正确性。所以,在数字证书技术中,也要有一个第三方来充当这个权威机构的角色,这个第三方即数字证书认证机构,简称CA。若是咱们想要在应用中使用https协议,那么咱们首先须要向CA机构申请数字证书,申请流程以下:

  1. 向CA机构提交服务器端的公钥、服务器的域名、公司的相关信息等数据
  2. CA机构对申请人的身份进行验证经过以后会生成一个数字证书,证书中存放着服务器端的公钥等信息,而后使用信息摘要算法生成这个证书的信息摘要,最后再使用CA机构的私钥对信息摘要进行数字签名。前面咱们说过,使用信息摘要配合数字签名技术,能够保证数据的完整性和验证对方的身份。
  3. CA机构将最终生成的证书和数字签名发放给申请人,申请人将证书等数据放在服务器端。

当客户端使用https与服务器端进行通讯时,客户端会先下载服务器端部署的数字证书,而后使用CA机构的公钥(CA机构的公钥一般会预先内置在浏览器或操做系统中)对证书的数字签名进行解密,获得数字证书的信息摘要。若是对数字签名解密成功,则说明客户端拿到的数字证书确实是CA机构下发给服务端的证书,这样就能判断出对方确实是咱们想要通讯的对象。而后客户端会使用一样的信息摘要算法计算数字证书的信息摘要,并将计算出的信息摘要同对数字签名解密获得的摘要进行对比,若是相同,说明该证书没有遭到篡改,保证了获取到的服务器端公钥是完整的。 数字证书技术.png

自签名证书

除了向CA机构申请证书意外,咱们其实也能够本身来生成数字证书,经常使用的如使用openSSL来生成证书,可是使用自签名证书时不安全的,由于没有了可信赖的CA机构的担保,客户端即便可以拿到自签名证书,也没法证实这个证书确实是真正的服务器发送的证书,极可能在网络传输过程当中这个证书已经被掉包了。

若是网站的服务端使用的时自签名证书,当咱们浏览网站时,浏览器会提示访问的网站不安全,一般会让用户自行选择是否继续访问。

自签名证书一般只在程序开发调试阶段使用,不建议在生产环境中使用。

HTTPS

https协议并不是一种新的协议,而是在http协议的基础上加入了SSL、TSL等协议,使得网络通讯变得更加安全。

https协议通讯流程

https的通讯流程能够归纳为如下几步: https协议通讯流程.png

  1. 客户端向服务器发送ClientHello报文以开始SSL通讯,该报文中包含了客户端所用的SSL的版本及加密组件列表

  2. 服务器端向客户端发送Server Hello报文,该报文中一样包含了服务器端的SSL版本及加密组件列表

  3. 服务器端发送Certificate报文,该报文中包含了服务器端的数字证书,客户端收到数字证书后会验证该证书的真实性

  4. 服务器发送Server Hello Done报文,最初的SSL握手结束

  5. 客户端发送Client Key Exchange报文,该报文中包含了客户端生成的一种被称为Pre-master secret的随机密码串,用于在以后的http通讯中进行对称加密。而且该报文已经使用第三部中获取的服务器端公钥进行加密,防止了对称加密秘钥被获取。

  6. 客户端发送Change Cipher Spec报文,告知服务端以后的通讯会使用第5步中的Pre-master secret密码进行加密

  7. 客户端发送Finish报文。

  8. 服务端一样发送Change Clipher Spec报文

  9. 服务端一样发送Finish报文

  10. 客户端和服务器端都发送了Finish报文以后,SSL链接便创建完成了。以后客户端发送普通的http请求,请求的内容会用以前的Pre-master secret进行对称加密

  11. 服务器响应客户端的http请求,并返回http响应,一样会使用Pre-master secret进行对称加密。

  12. 客户端断开链接,关闭TCP通讯

https的优缺点:

很明显,https最大的优势就是安全,保证了数据的保密性、完整性,验证了通讯方的身份。可是,因为https加入了SSL等协议,增长了握手次数,使得网络通讯变得更加复杂,相比http,网络负载可能会变慢2-100倍,并且因为在通讯中加入了大量的加密解密过程,增长了cpu的负担,加剧了服务器的压力。所以,是否使用https协议,须要根据实际使用场景和业务需求,进行综合的评判。

参考资料:《图解HTTP》 上野宣 著