使用DockerCertBot获取SSL证书
如果是腾讯云或者阿里云上购买的或管理的域名可以直接在上面获取到免费证书。因为我的域名是国外买的,然后DNS管理是在Clouflare上,所以我采用的是CertBot去获取SSL证书。这里说明一下CertBot是通过Let‘s Encrypt获取到免费的SSL证书。certBot大致有两种获取证书的方式,主要是验证域名是不是你的。
第一种是Webroot方式,这种是在你的站点下放一个/.well-known/acme-challenge,在里面创建一个文件然后let's encrypt会去请求整个文件。webroot方式因为要访问你的站点目录,但是有些时候我们的站点只是一个ip加端口的服务,并不知道具体的目录在哪里,这种情况webroot方式就不可行。
第二种是DNS模式。我就采取的这种方式获取SSL证书,下面详细讲讲获取流程。
CertBot官方提供了十几种主流的 DNS 服务商的镜像,还提供了示例支持你自己进行封装
我采用的是cloudflare,所以对应的镜像是certbot/dns-cloudflare
因为使用 DNS 模式,需要提供 DNS 的验证文件(包含邮箱和私钥),所以这里需要先创建一个验证文件。
mkdir -p /data/letsencrypt/
touch /data/letsencrypt/cloudflare.ini
然后在 cloudflare.ini
中写入你的数据,比如:
dns_cloudflare_api_token=vQN7hzhm41QcXQXXXXXXXXXekMjYsbInCeUcfgmZ
token在cloudflare个人资料页面获取,需要在页面上创建一个 编辑区域 DNS 的令牌
之后使用 Docker 的一次性执行模式启动一个客户端容器即可:
docker run -it --rm --name certbot
-v "/home/txb/docker_data/certbot/data/etc-letsencrypt:/etc/letsencrypt"
-v "/home/txb/docker_data/certbot/data/lib-letsencrypt:/var/lib/letsencrypt"
-v "/home/txb/docker_data/certbot/data/letsencrypt:/.secrets"
certbot/dns-cloudflare certonly
--dns-cloudflare-credentials /.secrets/cloudflare.ini
--dns-cloudflare-propagation-seconds 60
--server https://acme-v02.api.letsencrypt.org/directory
-d xxx.com
-d '*.xxx.com'
如果你不需要签通配符证书的话,那么可以去掉 --server https://acme-v02.api.letsencrypt.org/directory
参数 和 -d '*.xxx.com'
如果一切顺利,你的证书公钥私钥等文件将会一家人整整齐齐的摆放在我们映射好的目录:
/etc/letsencrypt/live
/etc/letsencrypt/archive 存放的是live下证书文件的软链接。此时我们就得到了域名的ssl证书,就可以在Nginx上配置https了