如何免费将网站升级为https

2,798 阅读3分钟

记录如何将网站升级https,免费获取证书。

背景

直接部署再服务器的网站通常默- 认是明文的 http 协议的,也就是说你所有的请求都是很容易被别人监控、窃取和修改的,基本等于裸奔,非常不安全。

可以通过开启 https 来增加安全防护功能,来使你的网站受到保护,不容易被窃取隐私信息。

想要开启 https 功能通常需要证书,而证书一般是需要购买的,本文介绍一种免费获取证书的方法。

准备

  1. 一台linux服务器;
  2. 安装 nginx;
  3. https 证书(本文章会说明如何免费获取证书);

步骤

1. 新建 html 文件

可以在服务器上的某个目录新建一个 index.html 文件,用来当做我们的网站。

  • 新建 index.html 文件
vim /data/sites/blog/index.html
  • index.html文件内容
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Https</title>
</head>
<body>
    <h1 style="text-align: center;">Hello Https!</h1>
</body>
</html>

2. nginx 代理

  • nginx 基本配置
user www;
# 其他配置...
http {
    # nginx请求日志地址
    access_log  /usr/local/webserver/nginx/logs/access.log;
    server {
        listen 80;              # 监听端口
        server_name your.server.name;# 域名
        index index.html index.htm index.php;
        root /data/sites;# 站点目录
        location / {
            root   html;
            index  index.html index.htm;
        }

        location /blog {
            root /data/sites/blog;
        }
    }
}
  • 重启 nginx 服务
nginx -t
nginx -s reload

经过这步,访问 http://your.server.name/blog 就可以看到这样的页面了:

image.png

可以看到现在地址栏的协议是 http ,还有个感叹号,点击提示不安全:

image.png

3. 获取https证书

按照如下配置:

  • 如果要用子域名,推荐使用通配符,这样只需生成一份证书

  • freessl.cn

image.png

  • 下载安装免费获取证书的软件 keymanagerkeymanager.org

  • 下载后注册账号并登录。

  • 点击打开 keymanager

  • 【方便】如果选择一键申请则会自动去阿里云添加记录并验证,完成证书申请【需要去DNS解析服务商创建id,key】

  • 离线生成

image.png

image.png

image.png

  • 按照软件提示取阿里云/腾讯云 等云服务的域名管理后台添加记录

image.png

  • 注意不要频繁创建证书,有频控,短时间多次提交会被拦截,时间大概是一小时

image.png

image.png

  • DNS 验证

image.png

  • 下载证书

image.png

  • 将文件拷贝到服务器某个目录

腾讯云直接申请(简单但不能用通配符)

image.png

4. 修改nginx配置https

  • 主要是两点:添加ssl配置、指定证书位置
user www;
# 其他配置...
http {
    # nginx请求日志地址
    access_log  /usr/local/webserver/nginx/logs/access.log;
    server {
        listen 443 ssl;              # 监听端口
        server_name your.server.name;# 域名
        index index.html index.htm index.php;
        root /data/sites;# 站点目录
        access_log  /usr/local/webserver/nginx/logs/blog.access.log;  #nginx请求日志地址

        # ssl证书地址
        ssl on;
        # pem文件的路径
        ssl_certificate     /usr/local/webserver/nginx/certificate/your.server.name_chain.crt;  
        # key文件的路径
        ssl_certificate_key  /usr/local/webserver/nginx/certificate/your.server.name_key.key; 
        
        # ssl验证相关配置
        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;    #安全链接可选的加密协议
        ssl_prefer_server_ciphers on;   #使用服务器端的首选算法


        location / {
            root   html;
            index  index.html index.htm;
        }

        location /blog {
            root /data/sites/blog;
        }
    }
    # http请求直接重定向到https
    server {
        listen 80;              # 监听端口
        location /{
            return 301 https://your.server.name/;
        }
    }
}
  • 重启 nginx 服务
nginx -t
nginx -s reload

5. 验证https

经过这步,访问 http://your.server.name/blog 就可以重定向到https://your.server.name/blog看到小锁已经有了,协议名为https:

image.png

参考