使用acme申请证书
使用 acme.sh 申请 Let's Encrypt ECC 证书
本文以 demo.example.com 为例,使用 acme.sh 申请 Let's Encrypt 的 ECC P-256 证书,并安装给nginx使用。
1. 安装 acme.sh
curl -sL https://get.acme.sh | sh -s email=example@gmail.com
source ~/.bashrc这里的邮箱不需要校验真实性,符合邮箱规则即可
检查:
acme.sh --version开启自动升级:
acme.sh --upgrade --auto-upgrade设置 Let's Encrypt 为默认 CA:
acme.sh --set-default-ca --server letsencrypt2. 申请 ECC 证书
2.2 使用http验证
申请前确保:
demo.example.com已解析到当前服务器- 公网 TCP 80 端口可访问
- 80 端口未被 Nginx、Apache 等服务占用
检查:
dig +short demo.example.com
ss -lntp | grep ':80 '申请 ECC P-256 证书:
acme.sh --issue \
-d demo.example.com \
--keylength ec-256 \
--standalone--standalone 会临时监听 80 端口完成 HTTP-01 验证。
2.2使用dns验证
如果域名托管在阿里云,需要申请阿里云对应权限的aksk,通过dns的方式进行验证
export Ali_Key='xxx'
export Ali_Secret='xxx'
acme.sh --issue \
--dns dns_ali \
-d demo.example.com \
--keylength ec-256
3. 安装证书
mkdir -p /etc/nginx/ssl安装:
acme.sh --install-cert \
-d demo.example.com \
--ecc \
--key-file /etc/nginx/ssl/demo.example.com.key \
--fullchain-file /etc/nginx/ssl/demo.example.com.pem \
--reloadcmd "systemctl restart nginx"最终生成:
/etc/nginx/ssl/demo.example.com.key
/etc/nginx/ssl/demo.example.com.pem不建议让业务程序直接读取 ~/.acme.sh/ 目录中的证书,应统一通过 --install-cert 安装到业务目录。
4. 验证证书
查看本地证书:
openssl x509 \
-in /etc/nginx/ssl/demo.example.com.pem \
-noout \
-subject \
-issuer \
-dates查看线上实际使用的证书:
openssl s_client \
-connect demo.example.com:443 \
-servername demo.example.com \
</dev/null 2>/dev/null |
openssl x509 -noout -subject -issuer -dates5. 自动续期
安装 acme.sh 时会自动创建定时任务:
crontab -lacme.sh 会定期检查证书,到期前自动续期。
因为设置了:
--reloadcmd "systemctl restart nginx"证书续期成功后会自动重启 nginx,使新证书生效。
需要注意:使用 --standalone 时,后续自动续期仍然需要使用 80 端口。如果以后安装了 Nginx 并长期占用 80,建议改用 webroot 或 Nginx 验证方式。