这篇文章是给个人博客的域名申请 SSL 证书,从而实现个人博客的 https 访问。由于在阿里、腾讯等平台申请长期的 SSL 证书较贵,这里选择免费的 Let’s Encrypt 颁发的证书,并使用 Certbot 来实现自动化整个 SSL 证书的管理流程。

申请单域名证书

单域名证书指为单个子域名颁发的 SSL 证书,例如 abc.example.com 为单域名,def.example.com 为另外一个单域名,需要分别对这两个单域名颁发对应的证书

申请泛域名证书

范域名证书指为多个子域名颁发的整数,写作、*.example.com,包含 abc.example.com、def.example.com 等子域名,只需要颁发一个证书,该二级域名的子域名就都能使用

参考:使用 Let’s Encrypt 免费申请泛域名 SSL 证书,并实现自动续期

  1. 安装aliyun cli工具

    1
    2
    3
    4
    $ wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
    $ tar xzvf aliyun-cli-linux-latest-amd64.tgz
    $ sudo cp aliyun /usr/local/bin
    $ rm aliyun

    安装完成后需要配置 凭证信息,其中地域 ID 可以参考:地域和可用区

  2. 安装certbot-dns-aliyun插件

    1
    2
    3
    4
    5
    $ wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
    $ sudo cp alidns.sh /usr/local/bin
    $ sudo chmod +x /usr/local/bin/alidns.sh
    $ sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns
    $ rm alidns.sh
  3. 申请证书

    • 测试是否能正确申请:
      1
      $ certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
    • 正式申请时去掉 --dry-run 参数:
      1
      $ certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean"
  4. 一般情况下,证书会自动续期,可通过以下命令测试是否正常实现自动续期,否则需要添加定时任务每个三个月执行一次

    1
    $ certbot renew --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
  5. 实现证书的自动续期

    1
    $ crontab -e

    然后输入:1 1 */1 * * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload",这里的--deploy-hook "nginx -s reload"表示在续期成功后自动重启nginx