https原理探究
1. 概述
-
这里会循序渐进的讲解:明文传输、对称加密、非对称加密、结合对称非对称加密、CA证书授权。
-
https
为了保证安全性以及效率,采取的措施:非对称加密、对称加密,、CA
。 -
这里参考的网址:HTTPS原理全解析。
2. 明文传输
- 传输过程如下图:
- 可以看到黑客很容易截取我们的请求,导致传输的数据泄露,因此不可取。
3. 对称加密
- 对称加密需要两个函数:加密函数
f1
,解密函数f2
,同时还需要一个秘钥K
,对于给定数据data
,有:
f 1 ( K , d a t a ) = X f 2 ( K , X ) = d a t a f_1(K, data) = X \\ f_2(K, X) = data f1(K,data)=Xf2(K,X)=data
- 此时我们传输密文
X
即可,传输过程如下:
-
这样其实也是存在问题的。
-
首先,服务端不可能存储和所有客户端对应的
K
,一方面十分浪费空间,另一方面服务端实现也不知道哪些客户端会连接。因此服务端可以保存一个K
。 -
那这样黑客也可以作为客户端获取这个
K
,这样别的客户端和服务端通信的数据也可以被黑客解密,因此不安全。
4. 非对称加密
-
非对称加密最常见的是
RSA
,关于该加密算法请参考:RSA公钥加密算法。 -
加密解密需要一个函数
f
,同时需要公钥PK
,私钥SK
,对于给定数据data
,有:
f ( P K , d a t a ) = Y f ( S K , Y ) = d a t a f ( S K , d a t a ) = Y ′ f ( P K , Y ′ ) = d a t a f(PK, data) = Y \\ f(SK, Y) = data \\ f(SK, data) = Y' \\ f(PK, Y') = data f(PK,data)=Yf(SK,Y)=dataf(SK,data)=Y′f(PK,Y′)=data
-
这种方式也存在问题。
-
客户端给服务端发送的数据
Y
是用公钥进行加密的,因此只有服务端可以解密。但是服务端给客户端发送的数据不能使用公钥加密,因为客户端没有私钥,无法还原数据,因此服务端只能使用私钥加密,这样的话Y'
可以被黑客解密,因为公钥是公开的,不安全。 -
解决办法之一:客户端也存储自己的公钥、私钥,将自己的公钥发给服务端,服务端使用客户端的公钥进行加密,这样也能保证服务端向客户端发送数据的安全性了。这样其实也是不可取的,原因有两点:
-
(1)但是非对称加密计算量太大;
-
(2)存在中间人问题。
-
5. 结合对称、非对称加密
-
使用非对称加密、对称加密两种方式确保数据安全传输。分为两个阶段:
-
(1)使用非对称加密协商之后对称加密需要的
K
; -
(2)使用对称加密进行传输数据。
-
-
流程图如下:
- 这种方式的话,第(1)步黑客无法获知
K
,并且每个客户端和服务端都可以协商属于该连接的K
,看似十分安全了,但是还是存在问题:中间人问题,如下图:
- 可以看到中间通信过程都被黑客劫持了,黑客可以获得协商的
K
,因此黑客可以获取通信双方的任何信息。
6. CA证书授权
-
CA:全称Certificate Authority,是一个机构,这个机构负责给网站颁发证书。
-
CA会有一系列安全的
CPK、CSK
,一个网站服务端有自己的PK、SK
,网站的PK
通过CSK
进行加密得到网站的license
,即:
f ( C S K , P K ) = l i c e n s e f(CSK, PK) = license f(CSK,PK)=license
-
这个证书
license
会保存在服务端,CA的目的就是保证证书不会被被中间的黑客篡改,如果被中间人(黑客)篡改的话,这个中间人(黑客)还需要向CA机构认证。 -
CA的原理就是利用了非对称加密的应用:私钥签名。
-
这样整个传输过程如下(参考网址):
- 客户端本地存储的有机构的公钥,这样就可以防止公钥被黑客篡改,加上私钥签名,确保了
license
的可靠性,cmd
中输入certmgr.msc
可以查看本地公钥,如下图:
-
保留了证书的安全性之后,我们就可以得到正确的服务器端公钥,然后将会话秘钥使用该公钥加密传输给服务端,即使中间被劫持黑客也不能解密,因为秘钥只在服务端存在。
-
之后通过会话秘钥(对称加密)就可以传输数据了。
-
这种方式既保证了安全性,同时最后传输使用对称加密,降低了计算量。