随着互联网的发展和普及,受众人群越来越多,信息安全的重要性也逐渐凸显,其中网络传输安全是重要的一部分,目前绝大多数网站和搜索引擎已经从http改为https协议进行网络数据传输和访问,Https比Http安全在哪呢?
简单来说两点:1、https证书可以用于客户端和服务端双向校验,防止黑客冒充,当然也可以配置为单向校验,看大家需求
2、用https的证书传输的数据是加密的,而http是明文的很容易被抓包
要了解https的通信原理首先要了解几个基本概念
1、对称加密算法(symmetric key algorithms):在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的。也就是说,加密和解密都是使用的同一个密钥。如AES加密
2、非对称加密算法(asymmetric key algorithms):在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。前面所说的公钥密码体制就是一种非对称加密算法,他的公钥和是私钥是不能相同的,也就是说加密使用的密钥和解密使用的密钥不同,因此它是一个非对称加密算法。如RSA加密
3、签名:签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过。一般是对信息做一个hash计算得到一个hash值(hash不可逆)。在把信息发送出去时,把这个hash值加密后做为一个签名和信息一起发出去。 接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过,因为这里hash计算可以保证不同的内容一定会得到不同的hash值,所以只要内容一被修改,根据信息内容计算的hash值就会变化。
Https通讯原理大体可以如下图:
从上到下我们一步一步的解释
1、客户端对服务器发起握手请求(hello,i am client 只是为了让读者更好理解,实际不会发送字符串,只是一个连接请求而已)
2、服务器返回数字证书,证书中包含加密算法,公钥,签名等内容
3、客户端验证是否为真实的服务端,生成随机数并用公钥加密发送给服务端
4、服务端用私钥解密,得到明文并用私钥加密,返回给客户端,客户端用公钥解密出明文和发送的明文作对比,一致则为真实的服务端。
这里简单解释一下,由于像RSA这种非对称加密,既可以用公钥加密,私钥解密,也可以用私钥加密,公钥解密,且公钥加密只有对应私钥才能解密,私钥加密只有对应公钥才能解密。公钥一般会公布出去,私钥会保留在服务端,不会让其他人知道。3,4不为什么能够起到校验服务端是否是真实客户端呢?是因为私钥都是保密的,如果是真实的服务端就能用私钥解密出正确的明文,并对明文进行加密,返回给客户端端,如果是冒充的,由于不知道私钥,则无法解密出正确明文,发给客户端的信息自然也是不正确的
5、客户端验证了是服务端之后,会将对称加密算法(如AES)的秘钥,以RSA加密算法加密,传给服务端。由于在上面已经验证了服务端是真实的,且私钥只有服务端有,所以即使此信息被黑客劫持也不会造成信息泄露,因为黑客不知道私钥,无法解密
6、服务端接收到后通知客户端接收成功,此时就可以用对称加密的算法进行加密的数据传输了
7,8、利用对称加密算法加密传输数据并进行数据传输
有童鞋看到这里可能会说,怎么没看到签名的使用,不是说好要先了解签名的概念吗?其实上面已经提到了,签名是为了验证内容是否被更改,所以应用都是在数据传输的时候,也就是7,8步上,客户端发送加密数据的时候会加一个加密后的签名,服务端验证通过验证这个签名来确认信息是否被修改。
就先写这么多,下一章给大家介绍下数字证书相关内容。
注:上述纯属个人理解,如有错漏之处,请大家指正,不胜感激