使用 CertBot 自动更新 Let's Encrypt SSL 证书

首次申请

下载安装 CertBot

# 下载 CertBot 脚本到当前目录,假设当前文件夹为 ~ 目录
wget https://dl.eff.org/certbot-auto
# 为 CertBot 脚本增加执行权限,# a 为 all 简写,x 为 execute 简写,a+x 表示所有用户及群组的可执行权限
chmod a+x ./certbot-auto

配置 pip 国内源

注:若之前已配置,请跳过此步骤;此步骤的目的是加速 CertBot 下载 python 模块的速度

# 新建 .pip 文件夹并进入
mkdir .pip && cd .pip
# 创建 pip.conf 文件
vi pip.conf
# 在 pip.conf 文件中输入以下内容
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
# 保存退出

运行脚本,安装依赖

./certbot-auto --help

配置 nginx

目的:获取域名证书过程中, Let's Encrypt 会对域名发起访问,以确认申请者对域名的所有权;故需要配置 nginx,以便能够对 Let's Encrypt 的访问返回正确的响应;

# 创建文件夹,用于  Let's Encrypt 访问时返回响应内容
mkdir /home/letsencrypt
# 打开 nginx 配置文件进行编辑,此处假设 nginx 的配置文件在以下路径:/usr/local/nginx/conf/nginx.conf,如不是,则相应修改路径
vi /usr/local/nginx/conf/nginx.conf
// 在 nginx 配置文件中,找到 http 下监听 80 端口的 server
http {
    //...(略)...
    server {
        listen 80;
        
        // 添加如下内容,此处假设申请域名为 www.helloworld.com,请修改为实际申请的域名
        server_name  www.helloworld.com;
        location ^~  /.well-known/acme-challenge/ {
            defaulf_type "text/plain";
            root  /home/letsencrypt/;
            }
            
        // ......以下略......

重启 nginx

# 此处假设 nginx 可执行文件在路径 /usr/local/nginx/sbin 下面,如不是则相应修改路径
# 先使用 -t 参数测试配置文件格式是否正确
/usr/local/nginx/sbin/nginx -t
# 若正确,屏幕上将显示以下字样
> nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
# 重启 Nginx
/usr/local/nginx/sbin/nginx -s reload

运行脚本,申请证书

在申请证书前,记得先将域名的 DNS 解析指向当前的服务器 IP,这样 letsencrypt 机构在向域名发起连接请求的时候,才能路由到当前设置的机器

# 此处为域名 www.helloworld.com 申请一张证书,其中的 youremail.com 请替换为你自己的邮箱地址
./certbot-auto certonly  --email youremail.com --webroot -w /home/letsencrypt -d www.helloworld.com
# 如果要为多个子域名(如 api/test/www) 申请一张证书,则相应修改命令如下
./certbot-auto certonly --email youremail.com --webroot -w /home/letsencrypt -d api.helloworld.com -d test.helloworld.com -d www.helloworld.com

申请成功后,界面下会有如下的成功提示:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/helloworld.com/fullchain.pem. Your cert
   will expire on 2019-08-26. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again......

配置 nginx,启用证书

// 在 nginx 配置文件中,找到 http 下监听 443 端口的 server
http {
    //...(略)...
    server {
        listen 443 ssl;
        
        // 修改 server_name、ssl_certificate、ssl_certificate_key 三个字段的值
        // 此处假设申请域名为 www.helloworld.com,请修改为实际申请的域名
        server_name  www.helloworld.com;
        ssl_certificate      /etc/letsencrypt/live/www.helloworld.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/www.helloworld.com/privkey.pem;
        
        // ......以下略......

当用户访问非加密的 80 端口时,如果需要让服务器自动跳转到 443 端口使用证书的 https 访问,则可以在 http 下 80 端口的 server 中增加如下内容:

// 在 nginx 配置文件中,找到 http 下监听 80 端口的 server
http {
    //...(略)...
    server {
        listen 80;
        server_name  www.helloworld.com;
         
        // 添加如下内容,实现自动跳转
        return 301 https://$server_name$request_uri
        
        // ......以下略......

重启 Nginx,让配置生效

# 此处假设 nginx 可执行文件在路径 /usr/local/nginx/sbin 下面,如不是则相应修改路径
/usr/local/nginx/sbin/nginx -s reload

测试自动更新

# 使用 --dry-run 选项表示测试,非真正执行更新
./certbot-auto renew --dry-run

若显示如下字样,则表示自动更新功能测试成功

Congratulations, all renewals succeeded. The following certs have been renewed:  
   /etc/letsencrypt/live/www.helloworld.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)

到期更新

由于 Let's Encrypt 颁发的证书只有 90 天有效期,因此需要定期进行证书更新

# 手动更新
./certbot-auto renew -v
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容