最近需要使用到 HTTPS,在学习 HTTPS 时,我发现网上关于 HTTPS 的文章很多都是从 HTTP 开始,逐步引出问题,最终得出 HTTPS 这个解决方案。我决定反其道而行之,先直接解释 HTTPS,再逐步反推回去。
什么是 HTTPS
一句话解释,HTTPS 是更安全的 HTTP,解决 HTTP 传递信息时,可能会被黑客截获的问题。
HTTPS 原理
HTTPS 通过加密传输内容保证安全。使得黑客即使截获信息,也无法读懂被加密的传输内容。通俗的说,就是先把传输的内容变成乱七八糟的字符,再传递出去。而这些乱七八糟的字符只能被真正应该接收到这个信息的人还原成原来的传输内容,任何其他人得到这个信息都无法还原成原来传输的内容。把传输的内容变成乱七八糟的字符的过程,叫做加密。把乱七八糟的字符变还原成原来的传输内容,叫做解密。
HTTPS 如何实现
密码
想一下,我们如果保证我们的微信,保险箱的安全?没错,就是密码。而这个密码我们放在哪里?我们写在纸上安全吗?我们告诉别人安全吗?当然不安全。只有记在自己脑子里才是最安全的。HTTPS 为了保证安全,同样有一个密码,这个密码放在服务器上,不能告诉其他人,就像我们微信、保险箱的密码一样。HTTPS 的这个密码叫做私钥,它用来解密被加密的信息,从而获得有价值的信息。
方法
那别人怎么知道,要怎样把他要传递的信息加密,而且加密后的信息又恰好能用私钥解密。显然,这个需要拥有私钥的人告诉他加密方法。这个加密方法也用到一个密码,这个密码叫做公钥。在计算世界里,我们把一个信息告诉另一个人,需要就过计算机网络传递。就像我们写信给别人的时候,需要邮递局把信投递过去。而在邮递局投递信的过程中,这封信有可能被别人调包,我们收到信时,就可能被欺骗。为了避免这个问题,需要一种方法可以鉴定这封信是不是被别人调包了。没错,笔迹鉴定机构可以做这个事情。同样的,在计算机世界里也有这样的机构,叫做 CA,它可以帮你鉴定这个信息没有被别人调包和修改。不过,鉴定的时候,不需要真正的找到 CA 这个机构帮你鉴定,鉴定方法已经内置在你电脑系统里面,你的电脑直接就可以做鉴定。这个时候,你就可以用公钥,把要传递的信息加密后传递出去了。
双向
现在,你已经可以放心的把任何消息发送给拥有私钥的人。但是,拥有私钥的人需要发消息给你怎么办?你没有私钥啊,是不是办不到了?没有就生成一个啊。你可以生成一个自己的私钥,不过这个私钥比较厉害,既可以用来把信息加密,也可以把加密后的信息解密成原来的信息。这个时候就不需要公钥啦。怎么安全的把你这个私钥告诉那个拥有私钥的人呢?用他告诉你的公钥把你的私钥加密,然后再发给他。这时,你们就可以通过你的私钥愉快而且安全的互相交流了。
分层
技术上,HTTPS 通过分层实现。计算机网络模型时分层模型,HTTPS 的设计同样遵循了这个模型。在原用的 HTTP 所属的应用层和 TCP/IP 之间增加了一层。这层一开始叫做 SSL,后来改名叫 TLS。但是,由于历史原因大家一般习惯把它叫做 SSL。
相关技术
为了方便专业人士进一步了解,下面列一下相关技术:
- 既有公钥也有私钥的技术叫做非对称加密技术
- 只有私钥的技术叫做对称加密技术
- 鉴定“笔迹”时,用的技术叫做数字签名技术
- 新增加的一个分层,用的技术叫做 TLS
(done)
参考资料
[1] SSL、TLS
[2] HTTP和HTTPS协议
[3] HTTPS原理