SSL证书自动续签(解决泛域名续签问题)

文章目录

  • SSL证书自动生成并自动续期
    • Let’s Encrypt
    • Certbot介绍
    • 申请ssl证书
      • 下载certbot
      • 申请证书
        • 非泛域名
          • 申请证书
          • nginx使用证书
          • 证书续期脚本
          • linux定时执行脚本
        • 泛域名

SSL证书自动生成并自动续期

自动续期使用Let’s Encrypt证书颁发机构和certbot客户端共同完成

Let’s Encrypt

Let’s Encrypt 是一家免费、开放、自动化的证书颁发机构(CA),为公众的利益而运行。它是一项由 Internet Security Research Group(ISRG)提供的服务。我们以尽可能对用户友好的方式免费提供为网站启用 HTTPS(SSL/TLS)所需的数字证书。这是因为我们想要创建一个更安全,更尊重隐私的 Web 环境。

Certbot介绍

Certbot 是 Let’s Encrypt CA(或使用 ACME 协议的任何其他 CA )的功能全面,可扩展的客户端,可以自动执行获取证书和配置 Web 服务器以使用证书的任务

申请ssl证书

下载certbot

百度文章很多,自行百度适合自己的操作系统对应的版本

申请证书

非泛域名
申请证书

使用webroot(其他几种方式大同小异standalone、manual,据说nginx插件方式很好用,还没有尝试过)的方式认证,即certbot会自动在web服务器的根目录下生成一个密钥文件,并通过==http(需要开放80端口)==的方式访问该域名下的该密钥文件

certbot certonly --webroot -w /root/appenv/docker/sclf-general/sclf-general-web-nginx/html -d jcps.sclf.top -d oss.sclf.top -d preview.sclf.top --force-renew

–webroot:指定方式

-w:指定域名的根目录

-d:指定域名

–force-renew:强制生成新的证书

命令执行后注意看日志,会告诉你证书保存在了哪个地方

nginx使用证书

修改nginx配置

server {
        listen       443 ssl;
        server_name  域名;

        ssl_certificate      /xxx/fullchain.pem;
        ssl_certificate_key  /xxx/privkey.pem;
}
证书续期脚本

使用certbot renew命令就可以直接将证书进行续期

编写自动续期的脚本

#!/usr/bin/env bash

echo start renew
certbot renew --force-renewal
echo finish renew

echo start find nginx container id
nginx_container_id=$(docker ps -a | grep sclf-general-web-nginx |cut -d ' ' -f1)
echo nginx_contain_id : $nginx_container_id

echo start reload nginx
docker exec $nginx_container_id nginx -s reload
echo finish reload nginx

我这里将nginx运行在docker中,所以需要找到docker中的nginx容器的id,然后在容器中让nginx对配置文件进行重新加载

解析来配合linux的定时任务定期执行该脚本即可自动完成续期

linux定时执行脚本

使用crontab在linux系统上执行定时任务,如未安装自行百度(一般情况centos默认安装了)

crontab -e进入定时任务编辑页面,添加如下内容

0 0 1 */3 * sh /root/appenv/docker/sclf-general/sclf-general-web-nginx/ssl-renew.sh >> /root/appenv/docker/sclf-general/sclf-general-web-nginx/ssl-renew-log/$(date +"\%Y-\%m-\%d")-output.log 2>&1

表示每3个月的1日0点0分执行脚本

具体表达式可以在线进行修改,https://www.matools.com/crontab

泛域名

只能使用dns解析的方式认证

结合上述内容以及以下github项目即可完成

思路:对接各个平台的dns解析服务api,使用cerbot自带的钩子完成

https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au

项目有点时间没有更新了,api有问题,可以自己更新python脚本对接最新的平台api

你可能感兴趣的:(ssl自动续签)