详解js对称加密和非对称加密
https保证数据在传输过程中不被窃取和篡改,从而保证传输安全
1、加密
- 对称加密:产生一个密钥,可以用其加密,可以用其加密,也可以用其加解密。
这个密钥可以是任何东西,比如说一个字符串,这个字符串通过一种数学算法,可以把我们的信息根据密钥产生加密过后的信息,又可以通过一种密钥解密成原始信息。
- 一开始客户端请求服务器的时候,服务器产生一个密钥,并且返回一个密钥给客户端告诉客户端使用这个密钥进行通信,客户端再发生数据的时候就会通过服务器给的密钥进行加密传送给服务器
缺点:在第一个发送请求的时候,第三方就获取到密钥,就不能保证数据不被窃取与篡改。
-
非对称加密:产生一对密钥,一个用于加密,一个用于解密
- 服务器先产生两个密钥,一个公钥,一个私钥,私钥永远不发出去。只发出去公钥。服务器和客户端要想要通信,服务器会给客户端先发送一个公钥,客户端用公钥加密数据传给服务器,服务器用私钥解密,服务器用公钥加密给客户端回消息,但是由于客户端没有私钥解不了密。怎么办呢?
这就用到非对称加密和对称加密的结合
服务器产生一个公钥key1和私钥key1,客户端想要和服务器通信,服务器先发一个公钥key1,客户端产生一个对称加密的密钥key2,将key2用公钥加密传输给服务器,服务器用私钥key1解密,然后服务器得到了key2,后续就用key2加密传输数据
这样还是会有隐患。第三方还是可以篡改
比如:
客户端与服务器开始通信了,最开始的时候,服务器给客户端传送了一个公钥key1。第三方可以保存公钥key1,并且产生公钥key3和私钥key3,然后将key3给客户端,然后数据就会被篡改。
那到底怎么解决呢?
这时候就要引入第三方机构了——CA证书颁发机构
服务器在任何请求到来之前会先做一件事,权威机构自己有一对密钥对(公钥,私钥),这个私钥是绝对不能发出去的。
服务器把钱、自己的公钥和域名发给权威机构,然后权威机构会给服务器颁发证书。
图片可以看到,用私钥加密的
证书签名 = www.fuwuqi.com + CA公钥key + 公钥key1(服务器)
证书签名的算法是公开的,它出现的目的,是为了让每一个拿到证书的终端,可以验证签名是否被篡改。
客户端和服务器开始通信了
-
第一步:服务器给浏览器证书,浏览器获取证书,浏览器通过证书获取到服务器的公钥key1和证书签名
-
接下来验证签名:证书签名 = www.fuwuqi.com + CA公钥key + 公钥key1(服务器)
如果第一步被篡改了那验证签名是错的。
-
http协议建立在TCP/IP之上
-
https协议建立在SSL(加密传输协议)+TCP/IP协议之上