阿里云后台部署全过程-6-HTTPS原理及配置

本文介绍HTTPS的基本概念,包括其在解决HTTP通信安全问题中的作用,以及混合加密方式的工作原理。此外,还详细介绍了如何在阿里云后台部署HTTPS,包括证书获取、配置Nginx等步骤。

本文已收录至我的个人网站:阿里云后台部署全过程-6-HTTPS原理及配置

简介

web应用的网络通信,一般是基于HTTP协议,HTTP协议处于应用层,基于TCP/IP协议,又在其之上。

HTTP协议的一个特性是明文传输,这就决定了基于它的通信,极易遭受劫持和窃听,所以为了解决它的通信安全问题,HTTPS应运而生。

HTTPS是HTTP Secure的简称,它实际上就是HTTP+SSL或者是HTTP+TSL,其实就是在TCP和HTTP之间又加了一层安全协议。

SSL(Secure Socket Layer)和TSL(Trasport Layer Security),这两个东西差不多,TSL1.0是基于SSL3.0开发的,一母同胞,换了波人开发而已。


两种加密方式

近代的加密算法是公开的,秘钥是保密的,只有通过秘钥才能解密。如果想在没有秘钥的情况下强行解密,从数学的角度来看,基本上是不可能的。

1、SSL采用非对称加密,也叫公开秘钥加密(Public-key cryptography)的加密方式,其中RSA是应用最广泛的加密算法。

这种方式有两把配对的秘钥,一把公钥,一把私钥,公钥用于加密,私钥用于解密。

公钥是公开的,任何人都可以拿到,而私钥是保密的,绝对不能让任何知道。

这种加密方式的特点是:A、不用担心私钥被人窃取。B、算法复杂,耗时较长。

2、与之相对的,有一种加密方式,叫对称加密,也叫共享秘钥加密,(Common key crypto system),它的加密、解密使用的是同一个秘钥,其中最流行的应该是AES加密算法。

这种加密方式只需要一把秘钥,所以必须将秘钥传递到通信双方的手中。

因此这种方式也有两个特点:A、秘钥在传输过程中可能被窃取。B、算法耗时较少。


混合加密&CA机构

为了博采众长,HTTPS采用了混合加密的方式,即交换秘钥阶段使用非对称加密方法,在建立通信交换报文阶段,则使用对称加密方式。

混合加密虽然解决了报文的安全性问题,但还是存在一个问题,即,如何确定通信的双方,就是双方预期的对象呢?怎么确保通信的对象不是别人伪装的呢?

这个问题产生的根源是,通信的双方,不能确保拿到手的对方公钥,即是对方真实的公钥,因为传输过程中,可能已经被篡改。

因此,第三方数字认证机构(CA, Certificate Authority),应运而生。

第三方机构的作用,简单来说就是,在与目标服务器B发起通信之前,你拿着B给你的公钥证书,通过CA的公钥,对证书签名进行验证,验证通过,说明B服务器的公钥是可靠的。

随后你就可以使用混合加密,安心通信了。


CA的可靠性

第三方机构成立前提是,它是绝对的可靠的,公钥的可靠性才能得以保证。

事实上,CA机构被黑客入侵,并不是没有的事情。

所以,根据CA机构的实力,一般可以分为大机构、中级机构和自认机构。

自认机构就是通过OpenSSL这套开源程序,自己给自己颁布证书,就相当于在互联网的世界中大喊:我就是我,所以基本没有信任度可言,因此浏览器一般不认可这种证书,会弹出提示:

因为一般浏览器只信任大机构,所以中级机构颁布的证书,有可能被视为自认机构,从而不被认可。


公钥认证流程

1、我们通过CA机构的公钥对B服务器证书签名进行验证时,必须先保证CA的公钥是可靠的,但目前无法保证在传输过程中CA的公钥不被篡改,因此目前的做法是直接将CA的公钥植入在浏览器之内。

2、CA机构的公钥之所以可以对B数字证书进行验证,是因为在此之前,B服务器的运维人员,会向CA机构提出认证申请,CA机构验明其身份后,会用自己的私钥对B服务器的公钥进行签名,然后把这个已签名公钥放入数字证书,最后把数字证书颁发给B服务器。

3、在与B服务器正式通信之前,会有一个握手阶段,B服务器会将CA证书发给客户端,客户端浏览器使用CA机构的公钥对证书中的签名进行验证,验证通过,则说明2个事情:A、证书是相关CA机构颁布的。B、B服务器的公钥是可靠的。

4、验证通过后,浏览器即可取出B服务器的公钥,然后进行下一步的混合加密通信。


客户端公钥

服务器存在公钥,与之相对,客户端也会有公钥机制,比如网银的客户端证书。但是客户端证书需要安装以及付费,即意味着每一个用户都需要知道如何安装,以及支付费用。所以客户端证书一般只在特殊场合使用。


HTTPS的配置

现在我们就是B服务器的运维人员,我们就需要走一遍公钥的认证流程,以及将整套HTTPS机制配置起来。

1、免费证书的获取。

参考:https://note.youdao.com/ynoteshare1/index.html?id=fe54152554a30614d861aa2576a56fae&type=note

2、从阿里云下载Nginx类型的证书,得到一个压缩包,解压后是2个文件,1个证书,1个秘钥。

3、把压缩包上传到服务器对应文件夹下。

4、根据阿里云教程,我做了如下操作:

--将阿里云建议的配置代码放到我们之前server配置段里面

--将监听端口改为443,即https默认端口

--变更server_name

--注释相对路径root html,因为路径映射我们下面做了

--变更cert后面的证书名和秘钥名

--删除location /配置段的内容,因为下面我们自己有写

--注释监听80端口

点击证书下载旁的帮助,即会出现阿里云教程

部分教程如下:

#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    listen 443 ssl;
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
    root html;
    index index.html index.htm;
    ssl_certificate cert/cert-file-name.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。
    ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的加密套件的类型。
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
    ssl_prefer_server_ciphers on;
    location / {
        root html;  #站点目录。
        index index.html index.htm;
    }
}

server {
    listen 80;
    server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
    rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    location / {
        index index.html index.htm;
    }
}

5、做了以上操作,重启Nginx,但是失败了,使用检查语句

发现我们的配置文件的目录下,应该只有文件类型,不能有目录类型,虽然阿里云的教程,好像是叫我们在同一个目录下创建目录和放置证书和秘钥。

6、把证书目录移到外面一层

7、同时把证书文件的路径改为绝对路径

8、打开阿里云控制台的安全配置规则,配置上443端口

9、在配置文件里新增一个配置段,用来实现http重定向到https,默认的location /{}配置段被我删除了。

10、重新测试和启动Nginx,OK了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值