Skip to main content

acme.sh免费申请Let's Encrypt泛域名证书

· 4 min read
Zeffon Wu

使用 acme.sh 可以免费生成 Let's Encrypt 泛域名证书,比 Certbot 申请方式简单易用,不需要手动设置TEXT,不需要设置定时任务申请证书。acme.sh 内置每天检测证书是否过期,过期则进行自动续期。如果想用 Certbot 的话,在之前写过一篇免费 https 通配符证书申请与配置

前言

使用 acme.sh 可以免费生成 Let's Encrypt 泛域名证书,比 Certbot 申请方式简单易用,不需要手动设置TEXT,不需要设置定时任务申请证书。acme.sh 内置每天检测证书是否过期,过期则进行自动续期。如果想用 Certbot 的话,在之前写过一篇免费 https 通配符证书申请与配置

申请与配置

  • 两种方式申请
  1. acme.sh 脚本
  2. docker 镜像获取

acme.sh 脚本

  1. 安装 acme.sh
$ curl https://get.acme.sh | sh
# OK
# Install success! 显示则安装成功
  1. 获取相关的参数
  • 不同的域名厂商使用的命令也不同,请参考官网
  • 获取阿里云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 # 或者重启终端就可以了

  1. 证书目录
Cert success
# 证书生成成功,同时下面还有key信息
# 生成的证书放在该目录下: ~/.acme.sh/example.com/
  1. 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有详细的教程

  1. 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
  1. 证书位置
-v "$(pwd)/out:/acme.sh" # 是映射在当前目录下的out目录,如果想更换其他目录,更换即可。
  1. 其他Nginx配置与脚本方式的配置相同。