一. 网络安全之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

    ​    ​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,都做了哪些改变。

 

posted on 2019-11-17 18:30  Man-YAN  阅读(176)  评论(0)    收藏  举报