acme.sh 免费申请 HTTPS 证书

服务器环境:Ubuntu 16.04 + Nginx

安装 acme.sh

因为自动需要续期需要重启 nginx,建议使用 root 用户安装

1
curl https://get.acme.sh | sh

然后再重载一下 .bashrc

1
source ~/.bashrc

申请证书

可以使用两种方式验证:HTTP 和 DNS 验证,我使用的是后者。下面主要介绍 DNS 验证。

acme.sh 目前支持 cloudflare、dnspod、cloudxns、godaddy 以及 ovh 等数十种解析商的自动集成。

这里我使用的是 DNSPod,登录 DNSPod,在 安全设置 里面新建一个 API TOKEN。

创建好了然后:

1
2
3
4
export DP_Id="ID"
export DP_Key="Token"

acme.sh --issue --dns dns_dp -d <domain> -d *.<domain> # 有多个子域名可以写多个-d <domain>.com

为了等待 TXT 记录生效,可能要等待 120 秒左右。

生成好了之后,ID 和 Token 会自动保存,下次再使用 DNSPod 的时候就不用指定,直接生成就好了。

安装证书

我打算把证书保存在 /etc/nginx/ssl/<domain>目录下,所以先创建该目录。

1
2
3
4
5
mkdir -p /etc/nginx/ssl/sxzz.moe/ #直接创建多级目录
acme.sh --installcert -d sxzz.moe \
--key-file /etc/nginx/ssl/sxzz.moe/sxzz.moe.key \
--fullchain-file /etc/nginx/ssl/sxzz.moe/sxzz.moe.pem \
--reloadcmd "service nginx force-reload" # 证书更新后会自动重载服务器

执行完这些命令后,证书会自动拷贝到指定的位置,并且以后自动更新证书(60 天)就会自动按照这些参数运行。

官方提示:这里用的是 service nginx force-reload,不是 service nginx reload,据测试, reload 并不会重新加载证书,所以用的 force-reload

配置 Nginx

这里我使用的是 Nginx 作为 Web 服务器,下面是我的配置,仅供参考。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server {
listen 443 ssl http2;

ssl_certificate /etc/nginx/ssl/sxzz.moe/sxzz.moe.pem;
ssl_certificate_key /etc/nginx/ssl/sxzz.moe/sxzz.moe.key;

ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

ssl_stapling on;
ssl_stapling_verify on;

add_header Strict-Transport-Security max-age=15552000;

root /var/www/sxzz.moe;
index index.html index.htm;
server_name sxzz.moe;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}

重启一下 Nginx,大功告成!

自动更新 acme.sh(引用自官方 Wiki)

目前由于 acme 协议和 Let’s Encrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步。

升级 acme.sh 到最新版:

1
acme.sh --upgrade

如果你不想手动升级,可以开启自动升级:

1
acme.sh --upgrade --auto-upgrade

之后,acme.sh 就会自动保持更新了。

你也可以随时关闭自动更新:

1
acme.sh --upgrade --auto-upgrade 0

参考链接

文章作者: 三咲智子
文章链接: https://blog.sxzz.moe/acme-sh/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 三咲智子