Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTPS是什么 #54

Open
wuyanqian0503 opened this issue Jun 25, 2021 · 0 comments
Open

HTTPS是什么 #54

wuyanqian0503 opened this issue Jun 25, 2021 · 0 comments

Comments

@wuyanqian0503
Copy link
Owner

wuyanqian0503 commented Jun 25, 2021

HTTPS是什么

我们知道HTTP是明文传输的,这也是他不安全的原因,那如何保证安全呢,由此就产生了HTTPS。

HTTPS并不是一种新的协议,而是在HTTP协议之上增加了 SSL/TSL协议,来保证其传输安全, 可以说 HTTPS = HTTP + SSL

SSL(Secure Sockets Layer 安全套接字协议),是属于会话层的一种协议,在TSL发布前,SSL协议经历了三个版本,直到第四个版本才发布为TSL协议,可以说,TLS是SSL的继任者,TLS = SSL3.1

image

HTTPS的作用

    • 内容加密 建立一个信息安全通道,来保证数据传输的安全;
    • 身份认证 确认网站的真实性
    • 数据完整性 防止内容被第三方冒充或者篡改

对称加密和非对称加密

  • 对称加密:使用同一个密钥进行加密和解密。对称加密通常使用AES 加密算法。
  • 非对称加密:使用一对密钥进行加密和解密,公钥是可以公开给外界的,而私钥则是自己保留的。他们必须是成对的,通过公钥加密的数据必须要用私钥来解密,而通过私钥加密的数据,则必须要用公钥来解密,所以公钥和私钥并没有固定的加密或解密的角色,而是用来区分是公开的或者私密的密钥。非对称加密通常使用RAS算法。

对称加密方式速度快,但是安全性不如非对称加密好。而非对称加密随发安全性好,但是加解密耗费的时间更长,速度慢。

HTTPS的实现原理

从CA证书说起

CA证书包含:

  • 证书的颁发机构、版本
  • 证书的使用者
  • 证书的公钥
  • 证书的有效时间
  • 证书的数字签名(加密后的摘要)和摘要算法
  • ...

客户端在拿到服务端给的数字证书之后,首先拿到证书中的公钥对证书中的数字签名(加密后的摘要)进行解密,得到一个摘要hash-a,再拿摘要算法对证书中除了数字签名以外的内容计算出一个摘要hash-b,比对这两个摘要值是否一致,如果一致则说明证书是真的,服务端是可以被信任的,可以放心地在后续传输数据时使用证书中的公钥对数据进行加密。如果不一致,则说明证书被篡改,服务器不可信任。

SSL的握手过程

上面我们说到了,HTTPS是利用了SSL进行的加密工作的。那么SSL协议是怎么进行握手的呢。

  • 首先,客户端 A 访问服务器 B ,比如我们用浏览器打开一个网页 www.baidu.com ,这时,浏览器就是客户端 A ,百度的服务器就是服务器 B 了。这时候客户端 A 会生成一个随机数1,把随机数1 、自己支持的 SSL 版本号以及加密算法等这些信息告诉服务器 B 。
  • 服务器 B 知道这些信息后,然后确认一下双方的加密算法,然后服务端也生成一个随机数 2 ,并将随机数 2 和 CA 颁发给自己的证书一同返回给客户端 A 。
  • 客户端 A 得到 CA 证书后,会去校验该 CA 证书的有效性,校验方法在上面已经说过了。校验通过后,客户端生成一个随机数3 ,然后用证书中的公钥加密随机数3 并传输给服务端 B 。
  • 服务端 B 得到加密后的随机数3,然后利用私钥进行解密,得到真正的随机数3。
  • 最后,客户端 A 和服务端 B 都有随机数1、随机数2、随机数3,然后双方利用这三个随机数生成一个对话密钥。之后传输内容就是利用对话密钥来进行加解密了。这时就是利用了对称加密,一般用的都是 AES 算法。
  • 客户端 A 通知服务端 B ,指明后面的通讯用对话密钥来完成,同时通知服务器 B 客户端 A 的握手过程结束。
  • 服务端 B 通知客户端 A,指明后面的通讯用对话密钥来完成,同时通知客户端 A 服务器 B 的握手过程结束。
  • SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户端 A 和服务器 B 开始使用相同的对话密钥进行数据通讯。

过程分析

我们知道,非对称加密算法比起对称加密是更安全的,因为只有公钥被公开给客户端用于加密数据后传输给服务端,而私钥则是保留在服务端对加密过的数据进行解密,这个过程是可以保证数据的安全的。但是这中间还是有一个漏洞,客户端需要拿到公钥才能加密数据,但如果公钥被中间人进行篡改,那么服务端就无法拿到正确的数据了,这种攻击就称为中间人攻击。

针对中间人攻击,我们就需要对公钥再进行一次验证,怎么做呢,就是通过CA证书进行公正,服务端将公正后得到的CA证书交给客户端,客户端根据证书中的相关信息进行公钥的验证,确认无误后就可以保证这个传输过程的数据不被窃取并且不被篡改。

但是由于非对称加密算法是比较慢的,如果在每次数据传输时都需要进行非对称加密的计算的话,通信的效率会大大降低,我们还需要解决一下效率的问题。那么上面提到了,对称加密的速度是很快的,而且只需要一个密钥进行加密解密,那么如果我们通过非对称加密的方式对对称密钥进行加密,后需传输数据,客户端和服务端都可以使用这个密钥对数据进行加密和解密了。

那么对称加密的密钥怎么得到呢,是通过SSL握手过程中互相传递三个随机数,并通过这三个随机数生成的密钥。

那么流程就很清晰了:

1、客户端拿到服务端的CA证书验证公钥是否正确

2、公钥正确的情况下,客户端和服务端都各自使用前面握手过程中产生的三个随机数来生成密钥

3、利用同一个密钥进行数据传输

**所以我们可以得到,其实HTTPS的加密是对称加密和非对称加密的结合,其中非对称加密是用来加密对称加密的密钥的,而对称加密才是真正用来传输数据的。**即利用了非对称加密安全性高的特点,又利用了对称加密速度快,效率高的好处。

HTTPS绝对安全吗

并不是,在数据传输阶段的对称加密密钥是通过随机数生成的,而随机数是客户端来生成的并且是存储在本地的,如果在本地的随机数被窃取,就有可能通过随机数生成密钥来冒充服务器。但是这个就不属于HTTPS的安全范畴了,HTTPS是保护传输过程的安全的,而这属于本地安全范畴,应该通过在客户端安装杀毒程序或者反木马程序,以及浏览器布丁升级来避免。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant