使用acme.sh白嫖https证书记录
最早之前我一直使用的是Free SSL
的HTTPS
证书,搭配KeyManage
管理证书,也可以随时导出,整体来说也算方便,基本申请个一年的证书,然后一年更换一次也算可以接受。但是最近到期了在更换的时候发现他们免费证书全部变成了Let‘s Encrypt
的证书了。
关于Let‘s Encrypt
是一个海外的专业证书发布机构,免费的证书也算还可以,但是有个弊端就是有效期只有3个月。
这个时候就要引入了这篇文章的主角了acme.sh
脚本了。acme.sh官方介绍
一句话总结就是acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。
下面就记录一下我的操作记录(我用了以后觉得真香,确实很好用)
安装acme.sh
curl https://get.acme.sh | sh -s email=my@example.com
my@example.com
记得切换成你的邮箱。
为了避免后续各种其他问题的产生,我们安装后最好在更新一下。
- 先更新电脑的
acme.sh
脚本 手动升级acme.sh --upgrade
或者开启自动升级acme.sh --upgrade --auto-upgrade
关闭自动升级功能acme.sh --upgrade --auto-upgrade 0
申请证书前的准备工作
acme.sh
支持很多生成证书的方式,具体你可以去上面的官方文档里面查看,我这里主要是搭配阿里云的域名管理验证来进行的。
获取阿里云AccessKey
获取阿里AccessKey地址 : https://ram.console.aliyun.com/manage/ak ,先生成对应的秘钥对。
然后点击页面右边的查看 Secret 就能看见自己申请的AccessKey ID
、AccessKey Secret
。请做好保密,不要外传
在机器中设置存储AccessKey
这里说一下,设置的目的是Let‘s Encrypt
在我们申请证书的时候会验证我们的域名归属权,所以他会在域名解析的一个地址信息用于验证你是否拥有该域名的归属权。
直接在你的机器中用root
权限输入
export Ali_Key="你申请的 AccessKey ID"
export Ali_Secret="你申请的AccessKey Secret "
开始申请证书
开始执行acme.sh --issue --dns -d 这里要换成你的域名 --yes-I-know-dns-manual-mode-enough-go-ahead-please
咱们为了方便,直接申请*.wuyabala.com
这样的通配证书。
acme.sh --issue --dns dns_ali -d wuyabala.com -d *.wuyabala.com
如果关于acme.sh
申请证书的方式和方法,你想了解更多,可以点击这里查看
执行后会提示 :
...
...
[Sat Apr 9 01:52:09 CST 2022] Your cert is in: /root/.acme.sh/wuyabala.com/wuyabala.com.cer
[Sat Apr 9 01:52:09 CST 2022] Your cert key is in: /root/.acme.sh/wuyabala.com/wuyabala.com.key
[Sat Apr 9 01:52:09 CST 2022] The intermediate CA cert is in: /root/.acme.sh/wuyabala.com/ca.cer
[Sat Apr 9 01:52:09 CST 2022] And the full chain certs is there: /root/.acme.sh/wuyabala.com/fullchain.cer
配置证书
在证书申请完毕后,我们还需要对证书进行配置。
acme.sh --installcert -d wuyabala.com --key-file /home/wuyabala/cert/www.wuyabala.com.key --fullchain-file /home/wuyabala/cert/www.wuyabala.com.crt --reloadcmd "systemctl force-reload nginx"
这里需要注意,将域名改成你自己的域名。更改存放证书的目录,毕竟申请的整数直接存放在/root/.acme.sh/你的域名
下并不是很好(官方也不建议)。
-key-file 证书要导出存放的目录
--fullchain-file 证书要导出存放的目录
如果你对HTTPS
的评分要求较高,也可以手动生成.pem
文件,用于提高评分(但是还需要在nginx
里面额外配置)。
openssl dhparam -out /home/wuyabala/cert/wuyabala.pem 2048
使证书生效
这一步就没什么好介绍的了吧,和之前的nginx
配置一样了。
ssl on;
ssl_certificate /home/wuyabala_docker/cert/www.wuyabala.com.crt;
ssl_certificate_key /home/wuyabala_docker/cert/www.wuyabala.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
配置好了以后一定要执行nginx -t
确认一下语法是否正确,没问题的话,就执行systemctl force-reload nginx
即可大功告成了。
收尾工作
到这一步的时候,其实网站已经开始用上HTTPS
证书了,但是我们还需要在做一些收尾工作。
开启自动更新
安装 acme.sh
时会自动创建一个 cronjob
定时任务,每天定期检查所有证书,如果证书需要更新会自动更新证书。
通过运行crontab -l
查看任务:
57 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
确保定时任务是正常开启的
开启acme.sh
的自动更新
由于 acme
协议和Let‘s Encrypt
都在频繁的更新, 因此 acme.sh
也经常更新以保持同步.
直接执行acme.sh --upgrade --auto-upgrade
即可。