HTTPS(HyperText Transfer Protocol Secure)是一种用于安全传输数据的网络通信协议。它是HTTP的安全版本,用于确保在客户端(通常是Web浏览器)和服务器之间传输的数据是加密的、完整的和安全的。
为什么要将HTTP升级到HTTPS?
在互联网上,明文传输是非常危险的,除了会发生“运营商劫持”之外,还有可能被黑客用类似的手段进行劫持, 来窃取用户隐私信息, 或者篡改内容。所以HTTPS 在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全
什么叫“加密”
加密是一种将数据转化为一种不可读的形式(称作密文),以便只有具有相应解密密钥的人能够将其还原为可读形式的技术(称作明文)。主要包括 对称加密 和 非对称加密
对称加密(Symmetric Encryption):
在对称加密中,相同的密钥用于加密和解密数据。这意味着发送方和接收方必须共享相同的密钥。
- 加密过程:明文数据 + 密钥 -> 密文数据
- 解密过程:密文数据 + 密钥 -> 明文数据
非对称加密(Asymmetric Encryption):
在非对称加密中,存在一对密钥,一个是公钥,另一个是私钥。公钥用于加密数据,而私钥用于解密数据。这允许发送方使用接收方的公钥来加密数据,但只有接收方拥有相应的私钥才能解密数据。
- 加密过程:明文数据 + 接收方的公钥 -> 密文数据
- 解密过程:密文数据 + 接收方的私钥 -> 明文数据
也可以反着用,核心是一个用于加密一个用于解密。
缺点:非对称加密的计算速度要比对称加密的计算速度慢很多
因此我们在传输数据时使用对称加密的方式,非对称加密对我们的一些准备工作进行加密保护。
HTTPS工作过程:
引入对称加密
首先我们在HTTP的基础上引入对称加密:即服务器与客户端之间使用一个“密钥”,发送数据时使用密钥加密,接收数据后使用密钥解密。这时候即使黑客截取了我们的数据,但是他没有服务器与客户端传输数据时使用的密钥,也就无法得知我们的传输内容。
但这个时候就出现了一个问题:密钥怎么来?
显然,服务器对每个客户端必须使用不同的密钥(如果服务器与所有客户端之间使用相同的密钥,那这个密钥就非常容易扩散进而轻易被第三方拿到)。而要对每个客户端使用不同的密钥,就必须要在传输数据前添加一个“沟通密钥”的过程。 这个“沟通密钥”的过程是没有加密的,所以这时候就可能被黑客截取数据进而得知我们的密钥:
引入非对称加密
在上述步骤中,我们在”沟通公钥“过程中没有进行加密,所以有可能被第三方截取数据造成公钥泄露。
所以,我们”沟通密钥“的过程也必须使用加密传输。这时候就引入了非对称加密:
服务器生成 公钥 和 私钥。将用于加密的公钥传输给客户端,将用于解密的私钥留下。客户端生成一个用于对称加密的密钥,通过服务器发送来的公钥对密钥进行加密,传输给服务器,服务器通过自己持有的私钥对数据进行解密得到对称加密的密钥。
这就完美的解决了刚才“沟通密钥”过程第三方对密钥的截取: 第三方截取了“沟通密钥”的数据报文,但是这个数据报文是被公钥加密了的,第三方没有用于解密的私钥,无法进行解密。
中间人攻击
即第三方将自己伪装成服务器,并自己生成一个公钥和私钥,将公钥发送给客户端,客户端用这个公钥加密密钥,达到骗取客户端的密钥的效果。
引入证书机制:
要避免中间人攻击,就得让客户端能识别当前的公钥是谁发送来的。为了达到这个效果,我们引入了证书机制。
证书机制引入了一个第三方公正机构,这个公证机构会审查服务器的资质,确保服务器安全可靠后会给服务器分发一个证书,这个 证书可以理解成是一个结构化的字符串, 里面包含了以下信息:证书发布机构 ,证书有效期 ,公钥(服务器的公钥) ,证书所有者 ,签名等等。
公证机构自己会生成一个公钥和私钥,公钥直接通过系统内置到各个客户端。
其中,数字签名是对证书内容的一个验证机制,即:对证书的属性生成一个校验和,防止证书内容被修改。并使用自己(公证机构)的私钥对校验和进行加密,防止校验和被修改。
客户端收到证书后,首先使用自己内置的公证机构的公钥对数字签名进行解密得到签名的明文,并根据签名对证书的内容进行验证,确保证书的内容没有被修改。然后拿到证书里的服务器的公钥,对自己生成的对称密钥进行加密,传输给服务器。
流程图:
针对黑客常用的几种手段进行分析:
1:黑客把证书的数据进行篡改(篡改服务器公钥)?
有数字签名的存在,会计算证书内容的校验和,如果证书被修改,客户端立即能察觉出来。
2:黑客修改数字签名?
数字签名使用公正机构的私钥加密,黑客不知道公证机构的私钥,无法按进行修改。
3:黑客能否效仿中间人攻击,自己申请一个证书传输给客户端?
证书内包含服务器域名等身份信息,黑客申请的证书肯定不能和服务器证书域名一样,不一样的话那客户端就能识别出来当前证书是错误的。
然而,道高一尺魔高一丈,到这里黑客仍有解决方案:伪装成公证机构,骗客户端内置自己的公钥,这时黑客就能截取证书,并替换数字签名,进而修改证书内容了,这里就不具体展开了。
总之,网络世界没有绝对的安全,只有相对安全。