
教程向:使用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 |
|
1 |
|
1 |
|
以上指令三选一,“my@example.com”填写你的可用邮箱。
安装完成后,acme.sh程序就安装到~/.acme.sh
下了。这时,请退出登录,或者运行source ~/.bashrc
2.更换CA
acme.sh默认使用ZeroSSL的证书。虽说使用这一家的证书也没什么问题,可是ZeroSSL的服务在地球范围内不稳定,这显然会影响到自动续签证书。
如果你没有闲到一天更新∞个证书,这边建议更换Let’s Encrypt,虽说这一家限制签发证书数量,但好在服务稳定。输入以下命令即可。
1 |
|
3.申请证书
先确定好使用什么方法申请。acme.sh支持使用DNS验证、http验证。
使用http验证。
请先确定网站在本地的根目录。之后输入下面的指令。
1 |
|
对于使用了apache、nginx的机器,可以分别使用以下指令。
1 |
|
1 |
|
如果机器的80端口没有使用,你甚至可以使用这行命令,使acme.sh伪装成一个服务端监听80端口。
1 |
|
使用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 |
|
这时,再运行以下命令,将“ example.com ”换成你的域名,以完成签发工作。
1 |
|
整个签发过程将耗时约5~10分钟。如果你使用其他厂商的服务,请访问 https://github.com/acmesh-official/acme.sh/wiki/dnsapi ,查看是否支持。
4.使用
证书申请成功后,将保存在~/.acme.sh/
下的对应域名文件夹,请将它们拷贝出来,再使用。
5.更新证书
证书的有效期为 90 天,acme.sh 会 60 天更新一次。
如果希望强制更新,执行:
1 |
|
6.自动升级acme.sh程序
1 |
|
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的时代,能够避免指令就尽量少用吧。