acme.sh 搭配 nginx 实现自动更新证书

使用acme.shopen in new window申请 Let's Encrypt 网站证书

克隆安装

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

普通用户或 ROOT 账户皆可运行,这步操作将 acme.sh 安装至 ~/.acme.sh并为你创建了一个 alias 方便使用 别名为:acme.sh,可以在 source ~/.bashrc或其他在使用的 shellrc 后使用

证书申请

申请有次数限制,确保网址可以正确访问到服务器,具体见:速率限制open in new window

下面将使用 HTTP 方式来申请证书文件,也是官方推荐的一种,可以自动检测过期并自动更新。

注:若您可用dns验证,推荐使用 zerossl 来申请证书,因为它支持泛域名,将www.mydomain.com 替换为 *.mydomain.com ,移除 --webroot path选项并添加 --dns dns_<服务商ali/dp等>即可

acme.sh  --issue  -d mydomain.com -d www.mydomain.com  --webroot  /home/wwwroot/mydomain.com/

将 mydomain.com 替换为你的域名,将/home/wwwroot/mydomain.com/替换为你网站静态文件所在位置

申请完成后将输出证书 cer 与 key 到 ~/.acme/mydomain

安装证书

  1. 输出可用的 key 与 pem
acme.sh --install-cert -d example.com \
--key-file       /home/wwwroot/ssl/cert.key  \
--fullchain-file /home/wwwroot/ssl/cert.key.pem \
--reloadcmd     "systemctl restart nginx"

具体输出位置据个人网站位置而定

  1. 修改 nginx 配置文件,引入证书
server {

	listen  443 ssl;
	server_name www.xx.com;

	...

	ssl_certificate     /home/wwwroot/ssl/cert.key.pem;
	ssl_certificate_key /home/wwwroot/ssl/cert.key;

	ssl_ciphers	HIGH:!aNULL:!MD5;
	ssl_protocols	TLSv1 TLSv1.1 TLSv1.2;

	ssl_session_timeout	5m;

	ssl_prefer_server_ciphers on;

	...

}
  1. 重启 nginx 服务使配置生效
nginx -t
# 检测nginx配置是否正确

systemctl restart nginx
# 重启nginx

打开网站检查是否已配置成功

到此结束,祝你好运。