5

使用Docker生成LetsEncrypt证书

 2 years ago
source link: https://xiaozhou.net/generate-letsencrypt-cert-via-docker-2019-03-13.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用Docker生成LetsEncrypt证书

发表于 2019-03-13 | 分类于 技术控 | 12 Comments | 阅读次数: 2977
字数统计: 556 字 | 阅读时长 ≈ 2 分钟

自从Blog启用SSL证书以来,一直用LetsEncrypt家的免费SSL证书。最近,因为配置一些新的域名,免不了要继续申请LetsEncrypt的新证书。之前申请证书的方法,都是手动git clone在GitHub上的那个certbot项目,然后运行命令。这种方式唯一的不足,是certbot本身需要用到python环境,每次申请证书还会更新一些本机的环境,如果遇到了Linux的包冲突,还得先解决冲突才行。

基于这样的困扰,哥想到了能不能用Docker来实现证书的申请?毕竟使用Docker的初衷,就是解决和隔离环境上的差异。结果google了一下,还真找到了这样的骚操作,顺便修改了一下脚本,实现了在Docker中运行certbot来申请证书的目的。由于是在Docker中运行,不用担心不同的服务器环境带来的差异,只需要把LetsEncrypt的目录映射到宿主机上即可。这样,新申请到的SSL证书能直接写入到宿主机的对应位置。基于Docker运行certbot,还能够做到即用即抛,每次运行申请SSL证书的容器,用完生成证书后,容器随即删掉,相当的方便。

封装了一个简单的脚本,在容器中申请证书的姿势大致如下:

#!/bin/bash
docker run -it --rm --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
-v "/data/letsencrypt:/.secrets" \
-p 80:80 \
-p 443:443 \
certbot/dns-cloudflare certonly \
-d $1

其中的 -v参数,将LetsEncrypt的目录跟宿主机关联起来,这样,每次生成的证书会保存在宿主机对应位置/etc/letsencrypt/中。
-p端口的映射,是为了在生成证书的时候,让certbot可以验证端口。
--rm参数,是为了达到用完即删除容器的效果,容器运行一次后,自从删除。

运行示例:

./cert.sh example.com

创建的脚本大致如此,非常简单,用起来也非常爽。其实,SSL证书renew的时候,也可以这么干。

我把创建和renew证书的脚本,都放在了gist上,供有需要的同学参考。

支持原创技术分享,据说打赏我的人,都找到了女朋友!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK