一. 网络安全之Http与Https
Http协议是互联网行业中设计的最好架构之一。20多年间,应用Http协议传输数据的软件越来越多,企图从http协议传输中非法获取、篡改用户重要数据的非法行为也越来越多。Http由于自身采用明文传输,无法在协议底层对数据进行保护,这就需要软件开发人员在应用层中自行开发,极大的降低了开发速度。为了更好的在底层解决网络安全的问题,Https出现在了大家的视野。
1. Https原理:
在OSI七层模型中,Http是应用层的协议,Https在表示层,Https在Http之上进行了与网络安全相关的所有操作。这样就可以使Http协议无感知的升级到Https。我们在日常开发时也会注意到,开发Http的应用和Https的应用并没有什么不同,只需要修改一些配置就可以在Http协议和Https协议之间随意切换。接下来我们看一下Https是如何保障网络安全的。
在介绍Https的原理之前,我们先来讲解一些Https中用到的一些概念:
1)对称加密与非对称加密
对称加密只用一个密钥,发送方用一个对称加密的算法(函数)和密钥对内容进行加密,接收方使用同样的对称加密算法和密钥对内容进行解密。对称加密的优点是,无论时加密还是解密都是很快的,只需要遍历一次数据即可,时间复杂度时O(n)。缺点是,对称加密的算法和密钥比较容易被第三方破解。
非对称加密有一个私钥、一个公钥,发送方用私钥对内容进行加密,并将公钥发送给接收方,接收方拿到数据后用发送方的公钥对内容进行解密。非对称加密的优缺点与对称加密正好相反,它如今依然可以被认为是无法破解的,但是需要消耗的资源也较多。
2)Hash加密
任意长度的输入,通过Hash算法,都会变成固定长度的输出,该输出也较散列值。Hash算法都是不可逆的,主要用于信息安全领域,可以把它理解为为内容生成了一个IdentityCode,两者之间有一个映射关系。但是Hash算法只能保证相同的输入会得到相同的输出,不能保证不同的输入得到不同的输出,这点比一下输入的长度和输出的长度也会知道。所以,Hash算法输出值的字节数越大,其对抗强行攻击的强度也就越大。
3)密码套件
密码套件在https协议中用来标识服务端和客户端的通讯都使用哪些算法。
举个密码套件的例子:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
ECDHE:密钥交换的椭圆曲线算法,用于生成非对称加密的公钥、密钥
RSA:非对称加密算法,用于身份验证
AES_128_GCM:对称加密算法、强度、分组模式,用于数据的加密
SHA256:签名Hash算法
概要来说,Https主要做了三件事:
1)内容加密
采用混合加密(对称加密+非对称加密)的方式,对要传输的数据进行加密,保证除了客户端以外的任何环节都无法查看到明文内容。
Https协议要求服务端和客户端都生成自己的非对称加密密钥,服务端还会生成一个对称加密密钥。首先服务端用对称加密对数据进行加密,并将这个对称加密的密钥用客户端的非对称加密的公钥进行加密。客户端收到这两个加密数据后,首先用自己的私钥得到对称加密的密钥,再用对称加密算法将原明文内容解密出来。
2)验证身份
验证数据传输方的身份,保证数据来源是已被CA验证的可信任网站。
客户端在连接Https请求时,会到CA证书池中验证证书是否有效,是否过期等。也会通过非对称加密的算法是否可以进行解密来进行身份验证。
3)保护数据完整性
通过Hash算法对数据加密,保证数据在传输过程中没有被篡改。
服务端用Hash算法对要传输的数据进行加密生成一个数字签名。客户端收到签名后,将解密出来的原明文内容再进行一次相同的Hash算法,并比较两者的值,如果相同则认为数据没有被篡改过。
二. 利用Nginx实现https
用免费SSL证书实现一个HTTPS站点
1. 下载python2-certbot-nginx
2. 使用certbot命令安装
命令:certbot --nginx --nginx-server-root=/home/tesla/nginx/conf/vhost/ -d 域名
执行命令后,certbot会让你做一个选择,是否重定向将http请求转换为https。
注: certbot --nginx需要将nginx设置为系统变量。
--nginx-server-root是保存conf的文件位置,不设置则会修改默认的nginx.conf。
3. 执行完前两步,就已经配置完https了。我们可以查看nginx.conf,都做了哪些改变。
浙公网安备 33010602011771号