使用 acme.sh 可以免费生成 Let's Encrypt 泛域名证书,比 Certbot 申请方式简单易用,不需要手动设置TEXT
,不需要设置定时任务申请证书。acme.sh 内置每天检测证书是否过期,过期则进行自动续期
。如果想用 Certbot 的话,在之前写过一篇免费 https 通配符证书申请与配置。
前言
使用 acme.sh 可以免费生成 Let's Encrypt 泛域名证书,比 Certbot 申请方式简单易用,不需要手动设置TEXT
,不需要设置定时任务申请证书。acme.sh 内置每天检测证书是否过期,过期则进行自动续期
。如果想用 Certbot 的话,在之前写过一篇免费 https 通配符证书申请与配置。
申请与配置
- 有
两种
方式申请
- acme.sh 脚本
- docker 镜像获取
acme.sh 脚本
- 安装 acme.sh
$ curl https://get.acme.sh | sh
# OK
# Install success! 显示则安装成功
- 获取相关的参数
- 不同的
域名厂商
使用的命令也不同,请参考官网 - 获取阿里云
AccessKey
的 ID 和 Secret 也就是 Ali_Key 和 Ali_Secret - 获取DNSPod的 Id 和 Key(key 也就是 token)
**阿里云获取证书**
# 替换成从阿里云后台获取的密钥
$ export Ali_Key="xxxxxx"
$ export Ali_Secret="xxxxxx"
# 换成自己的域名
$ acme.sh --issue --dns dns_ali -d example.com -d *.example.com
# --force 强制
# 命令执行后比较慢,需要等待
# 需要等待两多分钟,也可以在命令添加 `--dnssleep 900` 等待90秒
**DNSPod获取证书**
# 登录DNSPod后台获取相关的密钥 https://console.dnspod.cn/account/token
$ export DP_Id="123456"
$ export DP_Key="qwert2g3yuiop3"
# 换成自己的域名
$ acme.sh --issue --dns dns_dp -d example.cn -d *.example.cn
-bash: acme.sh: command not found $ source ~/.bashrc # 或者重启终端就可以了
- 证书目录
Cert success
# 证书生成成功,同时下面还有key信息
# 生成的证书放在该目录下: ~/.acme.sh/example.com/
- Nginx 证书配置
server {
listen 443;
server_name example.com;
ssl on;
ssl_certificate /root/.acme.sh/example.com/fullchain.cer; # 替换自己的证书
ssl_certificate_key /root/.acme.sh/example.com/example.com.key; # 替换自己的证书
ssl_trusted_certificate /root/.acme.sh/example.com/ca.cer; # 替换自己的证书
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
server {
listen 80;
server_name example.com;
rewrite ^/(.*) https://$server_name$request_uri? permanent;
}
docker 镜像获取
想用 docker 镜像来获取证书比较方便。官方的github有详细的教程
- docker 运行
$ docker run --rm -it \
-v "$(pwd)/out":/acme.sh \
-e Ali_Key="xxxxxx" \
-e Ali_Secret="xxxx" \
neilpang/acme.sh --issue --dns dns_ali -d example.com -d *.example.com
- 证书位置
-v "$(pwd)/out:/acme.sh" # 是映射在当前目录下的out目录,如果想更换其他目录,更换即可。
- 其他
Nginx配置
与脚本方式的配置相同。