很高兴回答这个问题。
HTTPS有什么用?和HTTP有什么区别?
最近一直在做安全方面的开发,我来回答下。
HTTP的全称是超文本传输协议(HyperText Transfer Protocol)。HTTPS则是以安全为目标的HTTP通道(HyperText Transfer Protocol Over SecureSocket Layer)。它们的区别就在于一个网络传输是非安全的,另一个网络传输是安全的。
普通的HTTP协议采用明文传输,传送的消息容易泄漏及被篡改,也无法验证消息的可靠性和完整性。比如说向服务器传输的数据中携带了自己的银行账户和密码,使用明文的话,第三方只要拦截传输过程中的数据包,账户和明文就很容易被别人窃取。又或者服务器给你回了一个指令,被人从中拦截,篡改为他的内容,你的客户端接收到时,就会按照篡改后的内容执行,非常不安全。再就是服务器给客户端发了条消息,因为网络原因,数据丢了一半内容,客户端又如何知道这个情况呢。
先简单介绍几个概念。
密钥是把明文转换为密文或者将密文转换为明文的算法中输入的参数。它分为两部分,公钥和私钥。有了私钥能推导出公钥,反过来则不行。可以简单理解为钥匙和锁头的关系,即有了钥匙能配出锁头来,但有锁头想配出钥匙来则很难。
证书是公钥的载体,里面除了公钥外,还有证书有效期,颁发者信息等其它内容。
摘要就是其字面上的意思,对一段内容进行简略抽象。
加密就是把一段内容使用公钥,转换为另一种无法识别的内容,解密就是使用私钥把加了密的内容还原成原始的内容。
签名可以理解为另一种形式的加密,它使用私钥把原始内容转换为无法识别的内容,验签则是拿着原始内容以及签名内容,使用公钥验证它们是否一致。
下面再说下安全处理过程。
服务器在给客户端的消息前,会先给消息生成摘要,再用自己的私钥给摘要做签名,最后再把签名和私钥对应的证书一起附在消息最后,发给客户端。客户端收到消息后,先验证证书的有效性,如果证书无效,直接pass以确保消息的可靠性。然后对消息做摘要,再拿证书里的公钥结合摘要验证签名是否有效,这样即使消息被篡改或者破坏了了,因为生成的摘要不同,签名也就不一样,可以确保消息的完整性以及未被篡改。
服务器和客户端在传输消息前,会先交换双方的密钥,然后传输过程都是一方用密钥对消息加密,另一方用密钥对消息解密。而第三方即使拦截了数据包,也会因为没有密钥而无法解读消息,避免其中的具体内容泄漏。
总之,相比较HTTP协议,虽然HTTPS的处理逻辑要复杂得多,但在互联网安全日益重要的今天,它已经成为了一个最常用的网络传输协议。
以上就是HTTP和HTTPS的一些概念性介绍,更复杂和详细的实现原理这里就不展开了,希望对你有帮助,谢谢。