HTTPS底层实现原理

Posted 风某人~Wind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTPS底层实现原理相关的知识,希望对你有一定的参考价值。

HTTPS

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性,HTTPS在HTTP的基础上加入了SSL,来保证数据的安全性,但是性能方面会比HTTP传输数据效率会低。

 

HTTPS设计主要目标是为了防止:

  1.  数据保密性:数据防止别人偷窥,不让第三方看到,就像这是只属于我们两个的小秘密,不让别人发现。
  2.  数据完整性:就是数据防篡改,传输的数据不能让第三方可以修改,就比如一年前你和女朋友分手了,然后今年她又来找你了,和好了,但是你不知道这一年的时间里面她经历过什么,是不是还是原来的那个她,有没有被别人改过。
  3.  身份认证:客户端和浏览器传输数据,期望只是我们两个人,防止第三方窃入进来,就比如你晚上和你另一半睡觉的时候,你得确认一下到底是不是真的是你老公or老婆。

 

HTTPS保证数据传输的安全是通过:

  1. 数字证书
  2. 加密算法
  3. 对称加密
  4. 非对称加密

 

HTTPS 我下面就分为几个方面来讲

  1. HTTPS实现原理对称加密和非对称加密
  2. HTTPS申请证书签名过程
  3. HTTPS四次握手

 

1. HTTPS实现原理对称加密和非对称加密

     1. 对称加密

      用指定的密钥对数据进行加密和解密,客户端用密钥进行加密,服务端也需要用相同的密钥进行解密,服务端和客户端使用的是同一个密钥,这种算法叫做对称加密算法

     2. 非对称加密

     使用不同的密钥进行加密解密,它是有一对密钥,分别成称为:私有密钥和公开密钥;如果用私钥对数据进行加密,只有用对应的公钥才能解开;如果用公钥对数据进行加密,只有用对应的私钥才能解开,公钥加密的数据公钥解不开;私钥加密的数据,私钥也解不开;这种加密和解密使用的是两个不同的密钥的就叫非对称加密算法

 

2. HTTPS申请证书签名过程

    HTTPS在进行非对称加密传输数据的时候需要携带证书证明自己的身份,但是这个证书需要我们自己去申请,流程如下:

    1. 用工具(OpenSSL)来生成一个私钥,然后用刚生成的私钥,在提供你自己的域名、公司名称、部门、省份、城市等信息来生成一个待签名证书(即CSR文件,也叫公钥),然后我们拿着这个代签名证书,去CA机构申请证书,CA会根据你提交的信息进行审核,审核通过(就相当于让别人签个名,防伪造)后会下发证书给你(CRT文件,里面包含了公钥,CA的签名,过期时间,申请人提交的信息),当你拿到签名好的证书以后,把它和刚开始的私钥一起部署在服务器里面,这样网站就是HTTPS的了。

    

3. HTTPS四次握手

 客户端和浏览器建立连接的过程中需要进行先四次握手,然后在进行数据的传输,我们上面讲过了,服务器申请证书以后,服务器端需要配置一个证书和私钥

 1. (第一次握手)客户端请求浏览器的时候,会携带客户端支持的加密算法,给服务器端。

 2. (第二次握手)服务器端收到客户端的请求以后,会把当前服务端的证书(证书里面包含服务端公钥,CA的签名,过期时间,申请人提交的信息)下发给客户端;

    假如有以下几个场景:

    1. 如果服务器的证书在下发客户端的过程中被第三方拦截到了,因为公钥是公开的,所以被第三方获取到证书中的公钥有没有安全隐患?

        因为公钥是公开的,所以被别人获取到也没关系,私钥传递的数据公钥能解,公钥传递的数据,公钥解不开,所以说当客户端用公钥加密的时候,第三方的公钥是解不开的。

    2. 如果第三方服务器拦截到了你的证书,能不能自己伪造一个证书,然后自己去跟客户端通信?

        证书伪造不了,正规机构颁发的证书都是内嵌在操作系统中的,服务端下发证书以后,在客户端的机器上会根据它内嵌的证书根据一些算法来判断你证书的真伪和有没有被篡改,如果篡改了,浏览器是不认的,一搬浏览器都会提示你当前证书不安全。

3. (第三次握手)客户端收到服务端下发的证书,并验证这个证书是合法的证书,那就会根据前面约定的加密算法,生成一个随机的密钥,然后把这个密钥,在用服务端发过来的公钥进行加密,在把加密好的密文,发送给服务端。(公钥加密,公钥解不开,第三方拿到公钥,也解不开公钥加密的数据)

4. (第四次握手)服务端拿到客户端发过来的密文,因为服务端它有私钥,所以说它能解开密文,并拿到里面的密钥。(服务端的私钥是一定不能丢的)

 

HTTPS经过4次握手以后,客户端和服务端双方都约定好了一个密钥,然后就可以用这个密钥进行对称加密算法来传输数据了。

 

 

 

 

以上是关于HTTPS底层实现原理的主要内容,如果未能解决你的问题,请参考以下文章

iOS底层实现原理高级进阶

ConcurrentHashMap 底层实现原理与线程安全问题

集合各个实现类的底层实现原理 ----- 原文地址:https://blog.csdn.net/qq_25868207/article/details/55259978

红黑树底层实现原理分析及JAVA代码实现

52 说一下 synchronized 底层实现原理?

52 说一下 synchronized 底层实现原理?