nginx手动部署Let’s Encrypt证书并自动更新

最近发现我用的宝塔面板,在自动申请Let's Encrypt的功能上面,抽风了。。具体来说就是完全没法申请下来

去论坛提问也没人管,搜了下发现至少有两个人和我遇到了相同的情况(letsencrypt证书申请报错),无奈自行手动部署证书

安装官方的Certbot

这部直接参考官方文档就好了:https://certbot.eff.org/docs/install.html

由于我是ubuntu,所以我用下面的命令来安装

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

获取证书

这一步只要你nginx网址正常能访问,并且你知道你网站的路径,就能直接申请:

sudo certbot certonly --webroot -w /www/wwwroot/bt.papapoi.com -d bt.papapoi.com --email lolicon@papapoi.com

当然,如果你同一站点指向多个域名,可以单证书多域名:

sudo certbot certonly --webroot -w /www/wwwroot/www.chenxublog.com -d www.chenxublog.com -d blog.papapoi.com --email lolicon@papapoi.com

证书全部会在/etc/letsencrypt/live/这个路径下面

配置

首先删掉宝塔默认的智障ssl配置,改成下面这样,注意域名和路径之类的按自己的实际情况修改:

server
{
    listen 80;
    listen 443 ssl http2;
    server_name bt.papapoi.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/bt.papapoi.com;

    #http强制跳转到https
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    ssl_certificate    /etc/letsencrypt/live/bt.papapoi.com/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/bt.papapoi.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497  https://$host$request_uri;

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;

    limit_conn perserver 300;
    limit_conn perip 25;
    limit_rate 512k;

    #SSL-END
    #下面的省略。。。。
    #.............
}

自动更新证书

更新证书很简单,运行下面的命令就可以了

sudo certbot renew

只要把这个命令放到crontab里,一个月跑一次就好了

附cron的用法和配置方法:如何在Linux中加入cron任务?

发表评论

您的电子邮箱地址不会被公开。