CertBot申请SSL证书并启动续期

安装nginx

sudo apt update
sudo apt install nginx
sudo systemctl status nginx
一般没有输出明显报错就是成功,安装成功一般也会输出类似以下信息
Jul 08 16:54:50 VM-0-7-ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server..

Nginx配置修改

  • sudo vi /etc/nginx/sites-available/default 添加80/443端口 443指定安装证书路径 可以先配置上 becool.vip替换为自己的域名 root路径替换为自己的hugo静态网站路径
server {
    listen 80;
    server_name becool.vip;
    root /home/ubuntu/blog/public;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}
server {
    listen 443 ssl;
    server_name becool.vip;
    ssl_certificate /etc/letsencrypt/live/becool.vip/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/becool.vip/privkey.pem;
    root /home/ubuntu/blog/public;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}

安装Certbot

sudo apt-get install certbot

申请证书

  • 注意替换自己的域名 申请成功会默认放在/etc/letsencrypt/live/目录 也会打印证书和privkey文件的路径 跟/etc/nginx/sites-available/default 里面的路径核对下是否一致 不一致就修改下/etc/nginx/sites-available/default里面的路径
  • 调用命令之前注意先停掉nginx
sudo certbot certonly --standalone -d becool.vip -d www.becool.vip --email your@email.com --agree-tos --no-eff-email --force-renewal

启动脚本定时监控续期

脚本内容

  • 默认提前5天续期 可自行修改
# 定义证书存储目录
certs_directory="/etc/letsencrypt/live/"
days_before_expiry=5  # 设置在证书到期前几天触发续签
# 遍历所有证书文件
for cert_dir in $certs_directory*; do
    # 获取域名
    domain=$(basename "$cert_dir")
    # 忽略 README 目录
    if [ "$domain" = "README" ]; then
        continue
    fi
    # 输出正在检查的证书信息
    echo "检查证书过期日期: ${domain}"
    # 获取fullchain.pem文件路径
    cert_file="${cert_dir}/fullchain.pem"
    # 获取证书过期日期
    expiration_date=$(openssl x509 -enddate -noout -in "${cert_file}" | cut -d "=" -f 2-)
    # 输出证书过期日期
    echo "过期日期: ${expiration_date}"
    # 将日期转换为时间戳
    expiration_timestamp=$(date -d "${expiration_date}" +%s)
    current_timestamp=$(date +%s)
    # 计算距离过期还有几天
    days_until_expiry=$(( ($expiration_timestamp - $current_timestamp) / 86400 ))
    # 检查是否需要续签(在满足续签条件的情况下)
    if [ $days_until_expiry -le $days_before_expiry ]; then
        echo "证书将在${days_before_expiry}天内过期,正在进行自动续签。"
        # 停止 Nginx
        sudo systemctl stop nginx
        iptables -P INPUT ACCEPT
        iptables -P FORWARD ACCEPT
        iptables -P OUTPUT ACCEPT
        iptables -F
        ip6tables -P INPUT ACCEPT
        ip6tables -P FORWARD ACCEPT
        ip6tables -P OUTPUT ACCEPT
        ip6tables -F
        # 续签证书
        certbot certonly --standalone -d $domain -d "www.$domain" --email your@email.com --agree-tos --no-eff-email --force-renewal
        # 启动 Nginx
        sudo systemctl start nginx
        echo "证书已成功续签。"
    else
        # 若未满足续签条件,则输出证书仍然有效
        echo "证书仍然有效,距离过期还有 ${days_until_expiry} 天。"
    fi
    # 输出分隔线
    echo "--------------------------"
done

配置crontab自动执行

  • 每天执行一次
0 0 * * * sudo /home/ubuntu/shell/auto_cert_renewal.sh >/home/ubuntu/shell/auto_cert_renewal.sh.log

本文由 mdnice 多平台发布

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用 Certbot 可以很容易地为 Django 应用程序申请 SSL 证书,以加强安全性。以下是一些步骤: 1. 安装 Certbot 在终端中运行以下命令来安装 Certbot: ``` sudo apt-get update sudo apt-get install certbot ``` 2. 获取 SSL 证书 在运行 Certbot 之前,需要确保您的域名已经指向您的服务器。运行以下命令获取 SSL 证书: ``` sudo certbot certonly --webroot --webroot-path /path/to/your/django/app/staticfiles -d yourdomain.com -d www.yourdomain.com ``` 请将“/path/to/your/django/app/staticfiles”替换为您 Django 应用程序的静态文件路径。此命令将为您的域名和 www 子域名获取 SSL 证书。 3. 配置 Django 在 Django 的 settings.py 文件中添加以下内容: ``` SECURE_SSL_REDIRECT = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True ``` 以上设置将确保 Django 应用程序只使用 HTTPS 协议,并且会将所有 HTTP 请求重定向到 HTTPS。此外,会将安全头设置为从代理服务器传递的 HTTPS 请求。 4. 配置 Web 服务器 在您的 Web 服务器配置文件中,将 HTTPS 设置为默认协议,并将 SSL 证书路径设置为 Certbot 生成的路径。 例如,在 Nginx 中,可以按如下方式配置: ``` server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name yourdomain.com www.yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; ... } ``` 以上设置将确保您的 Web 服务器接受 HTTPS 请求,并将 SSL 证书路径设置为 Certbot 生成的路径。 5. 重新启动 Web 服务器 最后,重新启动您的 Web 服务器以使更改生效。 现在,您的 Django 应用程序已经具有 SSL 证书,可以通过 HTTPS 访问了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯子爱淡定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值