HTTPS证书使用

226 阅读2分钟

HTTPS (全称:Hypertext Transfer Protocol Secure),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

申请证书

以阿里云为例。

image.png

image.png 如上图所示:可以选择购买付费证书,也可以选择申请免费证书。

这里我使用免费证书。

购买证书

image.png

证书购买完成。

证书申请

image.png

image.png 输入信息,提交审核。

image.png 验证信息,自动在域名控制台添加DNS解析记录。如下图:

image.png

很快就显示验证成功。 image.png

到此,我们的证书就申请成功了。

image.png

安装证书

下载证书

这里以Nginx为例: image.png

下载完成后,把证书放在Nginx服务下面。

修改Nginx配置文件

内容如下:

#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    listen 443 ssl;
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    server_name <yourdomain>; #需要将<yourdomain>替换成证书绑定的域名。
    
    #填写证书文件名称
    ssl_certificate cert/<cert-file-name>.pem;
    #填写证书私钥文件名称  
    ssl_certificate_key cert/<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 / {
        proxy_set_header X-Real-IP $remote_addr;

        # 后端的Web服务器可以通过 X-Forwarded-For 获取用户真实 IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 获取真实的请求主机名
        proxy_set_header Host  $http_host;

        # 标识该请求由 nginx 转发
        proxy_set_header X-Nginx-Proxy true;

        # 代理到本地的 3000 端口服务
        proxy_pass    http://127.0.0.1:3000;
    }
}

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

修改完成,重新启动Nginx服务器。

浏览器访问域名,如下图所示,依然显示HTTPS协议。

image.png

到此,已完成了由HTTP协议到HTTPS协议的华丽转身。

参考资料