为了在您的网站上启用 HTTPS,您需要从证书颁发机构(CA)获取证书(一种文件)。Let’s Encrypt 是一个证书颁发机构(CA)。要从 Let’s Encrypt 获取您网站域名的证书,您必须证明您对域名的实际控制权。您可以在您的 Web 主机上运行使用 ACME 协议的软件来获取 Let’s Encrypt 证书。
这里介绍由国人利用 shell 脚本开发的 acme.sh 脚本,这脚本使用方便,兼容各种 Linux 系统。他本身就是一个 shell 脚本,仅仅依赖 curl,acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。
作为家庭部署 WEB SSL 业务来说,面临最大的问题就是没有 80 端口,这令申请证书尤为困难。而 acme.sh 最后一种申请证书的模式 --dns 模式,它支持 41 个域名商的 API,可以实现全自动利用 API 来生成 dns txt 解析,从而实现域名鉴权工作。
acme.sh 使用方法
acme.sh 安装
安装很简单, 一个命令:
curl https://get.acme.sh | sh
更高级的安装选项请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-install
acme.sh 生成证书
这里我只列举 --dns 的使用方法。使用阿里云域名解析。
前往阿里云申请 Access keys
将 Access Key ID 和 Access Key Secret 记录下来备用
使用 acme.sh--dns模块获取 Letsencrypt 证书
1.首先录入阿里云的 Access Key ID 和 Access Key Secret 到环境变量。
$ export Ali_Key="xxxxxxxxxxxx"
$ export Ali_Secret="xxxxxxxxxxxxxxxx"
2.执行 acme.sh 命令申请证书
acme.sh --issue --dns dns_ali -d example.com
申请完毕后可以到 ~/.acme.sh/example.com 查看你的证书
Docker 使用 acme.sh
acme.sh 作者做了个 13M的容器 neilpang/acme.sh
拉取镜像
$ docker pull neilpang/acme.sh
创建 acme.sh 证书保存目录
$ mkdir ~/acme.sh
运行 acme.sh 容器
$ docker run --rm \
-v ~/acme.sh:/acme.sh \
-e Ali_Key="xxxxxxxxxxxx" \
-e Ali_Secret="xxxxxxxxxxxx" \
neilpang/acme.sh --issue --dns dns_ali -d example.com
这一步有时候是因为 https://acme-v01.api.letsencrypt.org 无法访问导致报错,这时候可以多尝试几次,控制台输出 Sleep 120 seconds for the txt records to take effect 的时候,就证明正在设置 txt 解析,等120秒解析生效就可以申请证书下来了。
2. 以守护进程的方式运行 acme.sh 容器
$ docker run --name acme.sh \
-d --restart unless-stopped \
-v ~/acme.sh:/acme.sh \
neilpang/acme.sh daemon
至此 acme.sh 证书到60天就会自动更新。