正在进入ing...

使用acme.sh白嫖https证书记录

发布时间:2022-04-09 浏览量: 470 文章分类: 运维相关

最早之前我一直使用的是Free SSLHTTPS证书,搭配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 ,先生成对应的秘钥对。

阿里云AccessKey界面

然后点击页面右边的查看 Secret 就能看见自己申请的AccessKey IDAccessKey Secret请做好保密,不要外传

阿里云AccessKey

在机器中设置存储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 即可。