acme.sh+阿里云DNS自动获取和更新泛域名证书

轻轻松松免费给网站加上https请求

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.
主要步骤:

  • 安装 acme.sh
  • 生成证书
  • copy 证书到 nginx/apache 或者其他服务
  • 更新证书
  • 更新 acme.sh

安装acme.sh

注意: 国内的服务器网络会比较慢可能会失败

1
curl https://get.acme.sh | sh -s email=my@example.com

脚本会安装home目录下:~/.acme.sh/,同时会创建一个cronjob,每天检测证书,快过期自动更新。

生成证书

切换CA提供商

1
acme.sh --set-default-ca --server letsencrypt

默认使用ZeroSSL提供证书感觉不太好用,可以切换到Letsencrypt。

  • 配置阿里云的accessKey和accessSecret
1
2
export Ali_Key="access key"
export Ali_Secret="access secret"

确保这个key拥有管理DNS和域名的权限

acmes.sh运行后会把上面的key和secret保存到~/.acme.sh/account.conf中,这样下次就不用重复添加了

注册域名

1
acme.sh --issue --dns dns_ali -d 'example.com' -d '*.example.com'
1
2
3
4
acme.sh --install-cert -d 'example.com' \
--key-file /etc/acme/ssl/example.com/example.com.key \
--fullchain-file /etc/acme/ssl/example.com/example.com.crt \
--reloadcmd "service nginx force-reload"

/etc/acme/ssl/example.com/下面的证书用于配置到nginx里面,~/.acme.sh下面也有证书,但是不建议使用,那下面的都是给acme.sh脚本使用的

reloadcmd命令如果使用的是docker部署nginx需要修改成docker的命令

使用证书

下面以nginx为例,配置内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/acme/ssl/example.com/example.com.pem; # pem文件的路径
ssl_certificate_key /etc/acme/ssl/example.com/example.com.key; # key文件的路径
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # nginx 版本不同可能会所不同
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
location / {
root /usr/share/nginx/html; # 这是静态资源也可以是反向代理配置
index index.html index.htm;
}

}

反向代理配置可以参考ss+websocket+tls+nginx配置伪装网站

管理acme.sh

更新acme.sh

手动升级

1
acme.sh --upgrade

设置自动升级

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

关闭自动升级

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

查看acme.sh管理的域名列表

1
acme.sh --list

acme.sh+阿里云DNS自动获取和更新泛域名证书

https://blog.itbuf.com/post/1109024919.html

作者

ItBuf

发布于

2024-02-23

更新于

2024-03-16

许可协议

评论