rainstar
教程向:使用acme.sh全自动申请免费SSL证书

教程向:使用acme.sh全自动申请免费SSL证书

当我们拥有属于自己的ECS时,建站就成了一件重要且必要的事。由于安全需要,使用https需要SSL证书。对于团队来说,购买证书的费用并不算多。可对于个人站点来说,一台2H2G的ECS只要最多¥200+,再花费近百元购入证书多多少少有点不值得。

而acme.sh这个开源项目成功地完成了免费且自动更新证书的工作,对于个人网站来说何乐而不为呢?下文将介绍如何优雅地使用acme.sh及其衍生项目实现证书自由。

下面是acme.sh的Github项目地址:( https://github.com/acmesh-official/acme.sh )


0.准备工作

一个域名(建议一级域名,二级域名建议使用类似于 .com.cn 这样的)

一台ECS,系统使用Linux。

可以远程控制ECS的环境。

(可选)一个Linux管理面板,推荐1Panel。(因为开源)

如果ECS在中国大陆,可能需要使用Github的镜像站。

注:如果你正在使用宝塔/1Panel之类的面板,这些产品自带了acme.sh程序并写了好用的前端,可直接跳过这些使用指令的内容,享受GUI的美好。

1.安装acme.sh脚本

1
curl https://get.acme.sh | sh -s email=my@example.com
1
wget -O -  https://get.acme.sh | sh -s email=my@example.com
1
2
3
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m my@example.com

以上指令三选一,“my@example.com”填写你的可用邮箱。

安装完成后,acme.sh程序就安装到~/.acme.sh下了。这时,请退出登录,或者运行source ~/.bashrc

2.更换CA

acme.sh默认使用ZeroSSL的证书。虽说使用这一家的证书也没什么问题,可是ZeroSSL的服务在地球范围内不稳定,这显然会影响到自动续签证书。

如果你没有闲到一天更新∞个证书,这边建议更换Let’s Encrypt,虽说这一家限制签发证书数量,但好在服务稳定。输入以下命令即可。

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

3.申请证书

先确定好使用什么方法申请。acme.sh支持使用DNS验证、http验证。

使用http验证。

请先确定网站在本地的根目录。之后输入下面的指令。

1
acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/

对于使用了apache、nginx的机器,可以分别使用以下指令。

1
acme.sh --issue -d mydomain.com --apache
1
acme.sh --issue -d mydomain.com --nginx

如果机器的80端口没有使用,你甚至可以使用这行命令,使acme.sh伪装成一个服务端监听80端口。

1
acme.sh --issue -d mydomain.com --standalone

使用DNS验证

目前已知1Panel使用了这套方案。这套方案的绝妙之处就在于可以使用域名解析服务商的api完成全自动验证。

在这里以阿里云为例,可参见阿里云官方的链接

首先登录阿里云官网,设置RAM访问。前往这个链接:https://usercenter.console.aliyun.com/#/manage/ak

随后在身份管理-用户中创建用户。
登录名称填写记得住的,勾选永久AccessKey访问,完成后记录Access Key与Secret Key。之后给刚刚创建的RAM授予AliyunDNSFullAccess权限。

在ECS上运行以下命令以记录RAM用户数据,将Access Key填入_your_ali_key处,将Secure Key填入_your_ali_secure_key处。此命令不会输出内容。

1
2
export Ali_Key="_your_ali_key"
export Ali_Secret="_your_ali_secure_key"

这时,再运行以下命令,将“ example.com ”换成你的域名,以完成签发工作。

1
acme.sh --issue --dns dns_ali -d example.com -d *.example.com

整个签发过程将耗时约5~10分钟。如果你使用其他厂商的服务,请访问 https://github.com/acmesh-official/acme.sh/wiki/dnsapi ,查看是否支持。

4.使用

证书申请成功后,将保存在~/.acme.sh/下的对应域名文件夹,请将它们拷贝出来,再使用。

5.更新证书

证书的有效期为 90 天,acme.sh 会 60 天更新一次。

如果希望强制更新,执行:

1
acme.sh --renew -d example.com --force

6.自动升级acme.sh程序

1
acme.sh --upgrade --auto-upgrade 

7.对于使用1Panel之类管理面板的用户

首先在商店安装OpenResky。确保有一个运行的网站后点击侧边栏的“网站-证书”。
这个界面
这个界面里,先点击Acme账户,选择创建。填写你的可用邮箱,账户类型选择Let’s Encrypt。

之后点击DNS账户,选择创建。名称随意,类型请选择你的域名解析商。

以上面阿里云为例,填写获取的Access Key与Secret Key。

之后点击申请证书,选择创建的网站、Acme账户与DNS账户,选择自动续签。

点击确认,等待完成签发。这个过程将耗时5~10分钟。如果使用默认DNS服务器,将会把时间拉长,取决于你在DNS服务商的设置。

拿到证书后,回到网站管理界面,点击配置-https。

勾选启用https,SSL选择刚刚申请好的证书,Acme账户与证书选择之前注册好的,其他默认。

点击保存,这时理论可以看到成功启用https。

总结

acme.sh其实还是很好用的(如果懂指令)

不过在这个可以使用GUI的时代,能够避免指令就尽量少用吧。

本文作者:rainstar
本文链接:https://sprinkle.moe/2025/05/11/acme1/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可