12 https

2018-06-10  本文已影响0人  一枝妖孽

一 HTTPS是什么

1、Https
Https并不是一个单独的协议,而是对工作在常规Http协议上的连接进行了一层(SSL/TLS)加密。通过在TCP和HTTP之间加入TLS(Transport Layer Security)来加密

2、SSL/TLS协议
SSL协议,是一种安全传输协议,TLS是SSL v3.0的升级版

3、Https整体架构图


image.png

TLS Handshake Protocol TLS握手协议
TLS Change Spec Protocol TLS规格改变协议
TLS Alert Protocol TLS警觉协议
TLS Record Layer Protocol TLS记录层协议

4、Https传输速度
1)通信慢
2)SSL必须进行加密处理

二 SSL/TLS协议握手

1、密码学原理
1)对称机密
加密数据用的密钥,跟解密数据用的密钥是一样的
2)不对称加密
私有密钥:一方保管
公有密钥:双方公有
RSA算法

2、数字证书

1)数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,同时也是一个文件。
数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。

2)为什么要有数字证书?

3)数字证书的颁发过程?
数字证书颁发过程一般为:用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构获得您自己的数字证书。

3、SSL与TLS握手整个过程===非常重要?????
1)Client Hello
握手第一步是客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1、客户端支持的加密套件(Support Ciphers)和 SSL Version 等信息
2)Server Hello
第二步是服务端向客户端发送 Server Hello 消息,这个消息会从 Client Hello 传过来的 Support Ciphers 里确定一份加密套件,这个套件决定了后续加密和生成摘要时具体使用哪些算法,另外还会生成一份随机数 Random2。注意,至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到
3)Certificate证书
这一步是服务端将自己的证书下发给客户端,让客户端验证自己的身份,客户端验证通过后取出证书中的公钥。
4)Server Key Exchange
如果是DH算法,这里发送服务器使用的DH参数。RSA算法不需要这一步
5)Certificate Request
Certificate Request 是服务端要求客户端上报证书,这一步是可选的,对于安全性要求高的场景会用到。
6)

4、总结
Https实际就是在TCP层与Http层之间加入了SSL/TLS来为上层的安全保驾护航,主要用到【对称加密、非对称加密、证书】,等技术进行客户端与服务端的数据加密传输,最终达到保证整个通信的安全性。


Https加密算法相关问题

一 密钥
密钥是一种参数,它是在使用密码【cipher】算法过程中输入的参数。同一个明文在相同的密码算法和不同的密钥计算下会产生不同的密文。

1 对称密钥

又称为共享密钥加密,对称密钥在加密和解密的过程中使用的密钥是相同的,常见的对称加密算法由DES、3DES、AES、RC5、RC6

优点是计算速度快,缺点是密钥需要在通讯的两段共享

【如果所有客户端共享同一个密钥,那么这个密钥就可以打开所有人的密文,给客户端和服务端带来非常大的安全隐患】

2 不对称密钥

又称公开密钥加密。服务端会生成一堆密钥,一个私钥保存在服务端,仅自己知道,另一个是公钥,公钥可以自由发布供任何人使用

与对称密钥加密相比,非对称加密无需在客户端和服务端之间共享密钥,只要私钥不发给任何用户,即使公钥在网上被截获,也无法被解密,仅由被窃取的公钥是没有任何用处的

3 密钥:RSA加密的简单过程

1)服务端生成配对的公钥和私钥
2)私钥保存在服务端,公钥发送给客户端
3)客户端使用公钥加密明文传输给服务端
4)服务端使用私钥解密密文得到明文

二 数字签名和CA

思考这样一个问题:数据在浏览器和服务器之前传输是,有可能在传输过程中被冒充的黑客把内容替换了,那么如何保证数据是真是服务器发送的而不是被掉包呢,同时如何保证传输的数据没有被人篡改呢?

1 定义

数字签名就是用于验证传输的内容是不是真实服务器发送的数据,发送的数据有没有被篡改果,它就是干这两件事情的,是非对称加密的一种应用场景。不过他是反过来用私钥来加密,通过与之配对的公钥来解密。

看图:
第一步:服务器把报文经过Hash处理后生成摘要信息Digest,摘要信息使用私钥private-key加密之后就生成签名,服务器把签名连同报文一起发送给客户端。
第二步:客户端接收到数据后,把签名提取出来用公钥public-key解密,如果能正常的解密出Digest2,那么就能确认是对方发的。
第三步:客户端把报文Text提取出来做同样的Hash处理,得到的摘要信息Digest1,再与之前界面出来的Digist2对比


image.png
image.png

二 CA 数字证书

那么如何保证你现在使用的公钥就是真实服务器发送给你的呢?
数字证书简称CA,它由权威机构给某些网战颁发的一种认可凭证,这个凭证是被大家(浏览器)认可的

上一篇下一篇

猜你喜欢

热点阅读