上一节中我们已经基本完成了django项目部署到nginx,这一节我们将http改为https,提升访问的安全性。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
几个概念
https虽然只比http多了一个s,但是却涉及到了很多新的概念,这些概念也很容易混淆。这里不会对https的流程做详细说明,只是为了便于理解,将关键步骤和概念进行简要说明。
对称加密和非对称加密
通信两端用同一个密码来进行信息加密和解密就叫做对称加密,而采用不同密码分别进行加密和解密就要做非对称加密。很容易想到对称加密要更简易和高效,但是安全性较低;相对而言非对称加密更安全,但是实现起来却更复杂。
https中将两者进行了结合。
私钥和公钥
非对称加密中,一个密钥会公布出来,想要给服务器发加密消息就用公布的密钥来加密,服务端保存另一个密钥专门用来解密。这个公布出来的密钥叫做公钥,而不能公开必须自己保存的密钥叫做私钥。当然,用私钥加密的消息也可以反过来用公钥解密。
客户端将用于对称加密的密码通过服务器的公钥加密再发送给服务器,这样就避免了对称加密的密码被人窃取。等到双方都获取了对称加密的密码,后续就可以用对称加密的方式进行高效传输了。
先用非对称加密,再用对称加密,这就是https的原理。
证书
现在问题来了,中间人有可能拦截服务器真正的公钥,而把自己的公钥发给客户端,解密了客户端返回的消息以后再用真正的公钥加密返回给服务器,从而达到嗅探的目的。
题外话,这也是抓包工具fiddler抓取https包的原理
那么客户端怎么知道得到的公钥就是服务器真正的公钥呢?现在的做法是找一个权威的第三方机构(Certificate Authority,CA),用CA的私钥对服务器的公钥以及url等等信息一起进行加密,之后再发送给客户端。客户端首先用CA的公钥进行解密获取到真正的服务器公钥,然后再进行后续操作。这个用CA的私钥加密过的用来鉴定服务器公钥真伪的文件就叫做证书。
这个世界上被大众承认的CA本来就不多,拿着自家服务器公钥去找他们申请证书基本是要花钱的。但是也不乏像Let’s Encrypt这种良心CA可以免费提供证书服务,不