跳至正文

[教程]使用 acme.sh+DNS 给自己的服务器签个 SSL 证书

SSL 的重要性无需多说,但是我身为一个懒狗肯定不想那么麻烦,而在 Linux 系统中可以使用 certbot 直接签发 SSL 证书,但是前提是你要有一个公网地址,不然就需要去 DNS 添加对应的 TXT 解析,很明显,这不符合我的作风,所以我需要使用一个 jio 本用来自动帮我一键签发 SSL 证书并且自动续签,而在 GitHub 里,就有 acme.sh 这个符合条件的仓库。

这篇文章就直接简单粗暴讲述如何使用 acme.sh 为自己签发年轻人的第一个SSL证书。

1.安装

acme.sh 官方提供了安装脚本供我们一键安装

curl https://get.acme.sh | sh 

如果你是一个不相信任何脚本,想要自己安装的 dalao,你也可以直接前往 GitHub仓库 拉一份

git clone https://github.com/acmesh-official/acme.sh.git

2.初始化

安装完 acme.sh 后,系统会在你安装时所用的用户的目录下新建 .acme.sh 文件夹

cd ~/.acme.sh/
vi acme.sh.env

这时候我们可以编辑 acme.sh.env 来添加自己的 API Key (我用 Cloudflare Global API Key 用于摆烂,但是正常情况下请自己创建一个可以修改 DNS 的 API 令牌,doc 在这里)
往文件中添加以下参数,如果不是 Cloudflare 的用户可以参考这里的文档。

export CF_Token="1145141919810"
export CF_Email="[email protected]"

添加完成后,我们需要读取下

source ./acme.sh.env
source ~/.bashrc

添加完成后,我们可以更换证书的 CA (我个人喜欢使用 Lets encrypt,当然你也可以换成文档表格中的其他 CA)

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

此时,你已经初始化完成了 acme.sh,现在就能去签 SSL 证书了

3.签发

签发 SSL 证书,你只需要输入这串命令就能签发并且自动续签证书

acme.sh --issue --dns dns_cf -d example.com -d *.example.com

想自选加密方法,可以在原有的命令后加 -k 参数
可以使用 RSA2048, RSA3072, RSA4096, RSA8192 ec-256, ec-384, ec-521.

acme.sh --issue --dns dns_cf -d example.com -d *.example.com -k 8192   #RSA8192
acme.sh --issue --dns dns_cf -d example.com -d *.example.com -k ec-521 #ec-521

等待一段时间后,你就能在 ~/.acme.sh/ 中看到包含自己证书的文件夹