前言

SSL/TLS 证书的主要功能是数据加密传输和服务器认证,以往的 HTTP 协议是以明文的方式传送内容,攻击者可以轻轻松松就能截取到传送的数据,非法获取重要信息;而HTTPS协议对数据进行加密处理之后才传送,攻击者无法监听、窃取和篡改,保障了网站数据的安全。

SSL/TLS 证书可以通过 DNSPod、阿里云等服务商申请,也可以通过 acme.sh 证书管理脚本申请免费的证书,具体操作方法如下。

一、安装证书管理脚本 acme.sh

1.安装证书管理脚本依赖的软件

apt update && apt install -y socat jq

2.安装 acme.sh 证书管理脚本

curl https://get.acme.sh | sh -s email=example@mail.com

安装过程进行了以下几步:

(1) 把 acme.sh 安装到你的 home 目录下:~/.acme.sh/

(2) 创建了一个 shell 的 alias,例如 .bashrc,方便使用:alias acme.sh=~/.acme.sh/acme.sh

(3) 创建 cronjob 计划任务,每天 0:00 点自动检测所有的证书,并自动续签快过期的证书。

3.刷新环境变量

source ~/.bashrc

4.开启 acme.sh 自动更新

acme.sh --upgrade --auto-upgrade

5.设置 acme.sh 的默认 CA 机构(letsencrypt / zerossl)

acme.sh --set-default-ca --server letsencrypt

6.新建目录用于证书签发时存放验证文件

mkdir -p /www/acme

二、申请证书前的准备

1.编辑站点的 nginx 配置文件

nano /etc/nginx/sites-available/www.example.com

在配置文件中的 server {} 内添加以下代码

    # 申请SSL证书验证文件目录设置
    location ^~ /.well-known/acme-challenge/ {
        # 默认MIME类型
        default_type "text/plain";
        # 验证文件目录
        root /www/acme;
    }

示例配置:

server {
    listen 80;
    listen [::]:80;
    # 绑定域名(修改成自己的域名)
    server_name www.example.com example.com;

    location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    }

    # 申请SSL证书验证文件目录设置
    location ^~ /.well-known/acme-challenge/ {
        # 默认MIME类型
        default_type "text/plain";
        # 验证文件目录
        root /www/acme;
    }
}

2.测试 nginx 配置文件

nginx -t

3.重新加载 nginx 配置

systemctl reload nginx

三、申请签发并安装 SSL/TLS 证书(ECC)

1.申请签发域名证书(ECC证书)

# 单域名命令
acme.sh --issue -d www.example.com --keylength ec-256 --webroot /www/acme

# 多域名命令
acme.sh --issue -d www.example.com -d example.com --keylength ec-256 --webroot /www/acme

2.创建用于存放站点证书的目录

mkdir -p /www/cert/www.example.com/

3.编辑站点的 nginx 配置文件

nano /etc/nginx/sites-available/www.example.com

添加证书的配置代码:

    # SSL 证书路径
    ssl_certificate /www/cert/www.example.com/fullchain.pem;
    # SSL 证书密钥路径
    ssl_certificate_key /www/cert/www.example.com/privkey.pem;

示例配置:

server {
    listen 80;
    listen [::]:80;
    # 绑定域名(修改成自己的域名)
    server_name www.example.com example.com;

    # SSL 证书路径
    ssl_certificate /www/cert/www.example.com/fullchain.pem;
    # SSL 证书密钥路径
    ssl_certificate_key /www/cert/www.example.com/privkey.pem;

    location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    }

    # 申请SSL证书验证文件目录设置
    location ^~ /.well-known/acme-challenge/ {
        # 默认MIME类型
        default_type "text/plain";
        # 验证文件目录
        root /www/acme;
    }
}

4.安装证书到指定的目录

整块复制粘贴,记得要修改域名,如果是多域名证书,只需要输入申请证书时命令中的第一个域名即可。

acme.sh --install-cert -d www.example.com --ecc \
--key-file /www/cert/www.example.com/privkey.pem \
--fullchain-file /www/cert/www.example.com/fullchain.pem \
--ca-file /www/cert/www.example.com/ca.pem \
--reloadcmd "systemctl force-reload nginx"

5.使用浏览器访问网站,并测试使用 HTTPS 进行访问查看是否正常。

最后修改:2023 年 10 月 25 日
如果觉得我的文章对你有用,请随意赞赏