前言
最近在研究关于acme.sh申请免费证书和自动续签,在此记录下遇到的问题,本文主要是使用nginx的方式申请证书
参考的文档
一、注册FreeSSL并申请证书
注册后申请证书
注册地址:https://freessl.cn/
填写信息后点击创建免费的SSL证书
泛域名必须以*开头这样后面添加新的三级头都可以使用申请的这个证书开启SSL。
填写域名配置信息,如果要申请泛域名证书就填写*,如果还需要其他域名就填写,记录类型选择CNAME,然后下一步。
添加的每个域名都需要添加到域名解析记录当中
到您的域名解析添加解析记录,下面以Aliyun为例:
点击【配置完成,立即检测】后获得证书申请命令
二、安装acme.sh
sudo su
建议切换到root模式,可以减少证书安装时的问题
注意:MacOS 不用切换到root更简单,libai@qq.com更换为自己注册Free SSL邮箱。
curl https://get.acme.sh | sh -s email=libai@qq.com
如果上面官方下载地址失败 或者 太慢,可以选用国内的备用地址
curl https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false | sh -s email=libai@qq.com
注意:安装完成后,再重新打开命令行(如果是 SSH,选择重新连接),以使acme.sh命令生效。
安装acme完成后使用“acme.sh -v”命令查看版本号,代码如下:
acme.sh -v
root@C20230830103466:~# acme.sh -v
https://github.com/acmesh-official/acme.sh
v3.0.8
三、生成证书
然后执行自己的acme部署命令:
执行命令后出现这个代表部署成功:Cert success.
四、copy证书到nginx目录
创建ssl证书目录: mkdir /etc/nginx/ssl/你的域名
安装证书到指定目录,支持Apache&Nginx两种方式。
部署到 WebServer
Apache example:
acme.sh --install-cert -d 你的域名 \
--cert-file /etc/nginx/ssl/你的域名/cert.pem \
--key-file /etc/nginx/ssl/你的域名/key.pem \
--fullchain-file /etc/nginx/ssl/你的域名/fullchain.pem \
--reloadcmd "service apache2 force-reload"
Nginx example:
acme.sh --install-cert -d 你的域名 \
--key-file /etc/nginx/ssl/你的域名/key.pem \
--fullchain-file /etc/nginx/ssl/你的域名/cert.pem \
--reloadcmd "service nginx force-reload"
五、更新nginx配置文件
如果有多个网站使用多个域名的话,都可以配置这个证书,只要二级域名是我们申请的(libai.com)就支持。
打开nginx配置文件进行修改
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.libai.com; //这里域名不需要管,因为我们申请的泛域名。
if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
ssl_certificate /etc/nginx/ssl/你的域名/cert.pem;//这里的文件路径就是上一步拷贝过来的
ssl_certificate_key /etc/nginx/ssl/你的域名/key.pem;//这里的文件路径就是上一步拷贝过来的
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
配置好后,重启nginx就生效啦!!!
重启: nginx systemctl restart nginx
六、更新acme.sh
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步
升级 acme 到最新 acme.sh --upgrade
如果你不想手动升级, 可以开启自动升级,之后 acme.sh 就会自动保持更新了
acme.sh --upgrade --auto-upgrade
关闭自动更新
acme.sh --upgrade --auto-upgrade 0
七、其他
证书默认是90天,如需强制更新证书,则执行以下命令:
acme.sh --renew -d 你的域名 --force
acme.sh会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书,使用以下命令可查看定时任务:
crontab -l
出错时,可以添加debug查看详情 acme.sh --issue ..... --debug
卸载证书
首先使用
acme.sh --list
命令查看目前服务器所存在的证书,如图,目前仅有一个证书:
然后我们使用:
acme.sh --revoke -d *.imotao.com
acme.sh --remove -d *.imotao.com
--revoke,销毁一个证书,
--remove,从acme.sh已知的证书列表中删除证书。
证书卸载吊销完成后,我们需要的话在重新申请吧,最好回到证书的目录看看证书是否删除,未删除的话手动删了吧。