使用acme.sh配置ssl证书并自动续签
目录
使用acme.sh配置SSL证书并自动续签
参考官网
Home · acmesh-official/acme.sh Wiki (github.com)
acme.sh用于生成免费的ssl证书,其完整实现了acme协议,并且由纯Shell脚本语言编写,没有过多的依赖项,安装和使用都非常方便。
支持多个ssl签发平台,如Let’s Encrypt (letsencrypt.org)、Free SSL Certificates and SSL Tools - ZeroSSL
本文使用Let’s Encrypt
准备环境:
- 域名
- Linux版本
Ubuntu22.04
- 代理服务器
Nginx1.18.0
- acem.sh
下载安装acme.sh
curl https://get.acme.sh | sh -s email=my@example.com
使用这个安装干了些啥
-
部署acme.sh程序到用户文件夹
-
为脚本创建新名称
acme.sh=~/.acme.sh/acme.sh
需重启终端,不想重启的话
.acme.sh# alias acme.sh=~/.acme.sh/acme.sh
-
创建一个每日定时任务,用于自动更新即将过期的证书
通过
crontab -l
查看:18 18 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
安装后目录
account.conf acme.sh acme.sh.env deploy dnsapi http.header notify
具体命令可查看官网
使用acme.sh配置ssl证书
直接指向项目
acme.sh --issue -d example.com -d test.com -w /var/www/project
-d参数指定域名,多个域名使用多个-d参数,第一个-d参数指定的域名即证书的主体名称,其它-d参数指定的域名为证书的可选主体名称。
-w参数指定的是域名的webroot目录,以example.com为例,-w参数的值即是http://example.com对应的webroot目录。如果使用多个-d参数同时指定了多个域名,则所有这些域名必须对应同一个webroot目录;另外,当前系统用户必须具有webroot目录的写入权限。
DNS自动模式(建议)
此方法会向域名解析平台添加一个TXT记录值,需要提供对应平台的Key和Secret,具体参考acme.sh/dnsapi/dns_ali.sh at master · acmesh-official/acme.sh (github.com) 我使用的是dns_ali。
#切换默认平台为letsencrypt 其他更换最后平台即可
acme.sh --set-default-ca --server letsencrypt
默认的签发平台是ZeroSSL,我使用的时候想着就用默认的平台,可是一直报错
et authz objec with invalid status, please try again later.
github上有人说是ZeroSSL的dns身份认证出问题了。This domain won’t issue · Issue #4991 · acmesh-official/acme.sh (github.com) 所以我换成了用letsencrypt
获取阿里云的Key和Secret,添加到系统环境变量
export Ali_Key="*******************"
export Ali_Secret="*********************"
生成证书
acme.sh --issue --dns dns_ali -d example.com -d www.example.com
该命令从系统变量中读取aliyun的api授权ID和密码,并通过dns_ali参数指定DNS提供商为阿里云。该命令将通过api自动为指定域名添加txt记录,并在验证完毕后自动移除txt记录。
aliyun的api授权ID和密码将被保存在.acme.sh的账户配置文件中,以供将来自动更新证书时使用,存储位置为:
~/.acme.sh/account.conf
通过 --install-cert
部署证书
acme.sh --install-cert -d *.example.com \
--key-file /etc/nginx/ssl/in/example.com.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "nginx -s reload"
使用 acme.sh --list
查看证书列表
Main_Domain KeyLength SAN_Domains CA Created Renew
*.ihuadz.top "ec-256" ihuadz.top LetsEncrypt.org 2024-02-18T04:06:07Z 2024-04-17T04:06:07Z
Nginx 部署
在项目对应的Nginx配置文件中添加
server {
listen 443 ssl;
server_name blog.ihuadz.top;
root /var/www/hexo;
ssl_certificate "/etc/nginx/ssl/ihuadz.top/fullchain.cer";
ssl_certificate_key "/etc/nginx/ssl/ihuadz.top/*.ihuadz.top.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}
访问https://blog.ihuadz.top ok。没问题
不同的项目配置不同的域名和路径即可,使用泛域名的话就不用重新申请证书