certbot-auto 生成 https 通配符证书

certbot-auto 生成 https 通配符证书

使用 certbot 为网站签发 letencrypt 的 HTTPS 通配符证书

在CentOS7上安装 Certbot 有三种方式:

  1. 使用 Certbot 官方提供的对应平台的 RPM 包安装
  2. 使用 Certbot 官方的提供的 certbot-auto 安装
  3. 使用 pip 安装 Certbot,因为 Certbot 是 Python 程序

安装

安装 certbot

  1. 获取安装脚本

    shell
    1
    curl -o /usr/local/bin/certbot-auto https://dl.eff.org/certbot-auto
  2. 给脚本赋权

    shell
    1
    chmod a+x /usr/local/bin/certbot-auto

安装 certbot hook 脚本

github仓库

在使用 certbot 时自动给 letencrypt 通配符证书自动续期(renew),提供了阿里云、腾讯云、华为云、GoDaddy等服务商的API接口接入。

  1. 克隆 certbot

    shell
    1
    2
    3
    4
    cd /opt/
    git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au certbot-letencrypt
    cd certbot-letencrypt
    chmod 0777 au.sh
  2. 配置

    • domain.ini

      如果 domain.ini 文件没有你的根域名,请自行添加。

    • DNS API 密钥:

      这个 API 密钥什么意思呢?由于需要通过 API 操作阿里云 DNS、腾讯云 DNS 的记录,所以需要去域名服务商那儿获取 API 密钥,然后配置在 au.sh 文件中:

      | 云厂商 | API 配置 | 备注 |
      | —- | —- | —- |
      | 阿里云 | ALY_KEYALY_TOKEN | API key 和 Secrec 官方申请文档 |
      | 腾讯云 | TXY_KEYTXY_TOKEN | API 密钥官方申请文档 |
      | 华为云 | HWY_KEYHWY_TOKEN | API 密钥官方申请文档 |
      | GoDaddy | GODADDY_KEYGODADDY_TOKEN | API 密钥官方申请文档 |

  3. 申请证书

    • 测试:

      shell
      1
      2
      3
      certbot-auto certonly  -d *.example.com --manual --preferred-challenges \
      dns --dry-run --manual-auth-hook "<脚本目录>/au.sh python aly add" \
      --manual-cleanup-hook "<脚本目录>/au.sh python aly clean"

      示例:

      /opt/certbot-letencrypt
      1
      2
      3
      4
      certbot-auto certonly  -d *.example.com --manual --preferred-challenges \
      dns --dry-run \
      --manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" \
      --manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"
    • 申请

      确认无误后,实际运行(去除 —dry-run 参数):

      shell
      1
      2
      3
      4
      certbot-auto certonly  -d *.example.com --manual \
      --preferred-challenges dns \
      --manual-auth-hook "<脚本目录>/au.sh python aly add" \
      --manual-cleanup-hook "<脚本目录>/au.sh python aly clean"

      示例:

      /opt/certbot-letencrypt
      1
      2
      3
      4
      certbot-auto certonly  -d *.example.com --manual \
      --preferred-challenges dns \
      --manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" \
      --manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"
  4. 续期证书

    • 对机器上所有证书 renew

      shell
      1
      2
      3
      certbot-auto renew  --manual --preferred-challenges \
      dns --manual-auth-hook "<脚本目录>/au.sh python aly add" \
      --manual-cleanup-hook "<脚本目录>/au.sh python aly clean"

      示例:

      /opt/certbot-letencrypt
      1
      2
      3
      certbot-auto renew  --manual --preferred-challenges \
      dns --manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" \
      --manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"
    • 对某一张证书进行续期

      查看已有证书信息

      shell
      1
      certbot-auto certificates

      记住证书名,比如 simplehttps.com,然后运行下列命令 renew:

      shell
      1
      2
      3
      certbot-auto renew --cert-name simplehttps.com  \
      --manual-auth-hook "<脚本目录>/au.sh python aly add" \
      --manual-cleanup-hook "<脚本目录>/au.sh python aly clean"

      示例:

      shell
      1
      2
      3
      certbot-auto renew --cert-name simplehttps.com  \
      --manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" \
      --manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"

加入 crontab

编辑定时任务工作表

shell
1
crontab -e

加入如下命令

由于证书有效期<30天才会renew,所以crontab可以配置为1天或1周

crontab
1
2
3
1 1 */1 * * root certbot-auto renew --manual --preferred-challenges \
dns --manual-auth-hook "脚本目录/au.sh python aly add" \
--manual-cleanup-hook "脚本目录/au.sh python aly clean"

配置 Nginx SSL

根据上述第三步,申请证书成功后得到的文件路径

证书存放路径:/etc/letsencrypt/live/example.com/fullchain.pem

私钥存放路径:/etc/letsencrypt/live/example.com/privkey.pem

根据域名不同存放于不同域名同名文件路径下。

  1. 创建 nginx 代码片段存放路径

    shell
    1
    mkdir -p /etc/nginx/snippets/
  2. 添加/编辑域名同名的配置文件

    shell
    1
    vim /etc/nginx/snippets/ssl-example.com.conf

    内容如下:

    /etc/nginx/snippets/ssl-example.com.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_ecdh_curve secp384r1;
    ssl_prefer_server_ciphers on;

    ssl_stapling on;
    ssl_stapling_verify on;

    add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
  3. 在需要使用 SSL 的网站配置文件中 SSL 部分server 中添加如下一行配置

    /etc/nginx/conf.d/example.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    server {
    listen 443 ssl;
    server_name www.example.com;

    client_max_body_size 2048m;
    # 引用ssl代码段
    include snippets/ssl-example.com.conf;
    ...
    }
评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...