使用ACME部署HTTPS证书

以OPENWRT为例

使用ACME部署HTTPS证书

背景

现在越来越多的服务都是基于web,大多数默认使用HTTP协议。HTTP协议是一种没有加密的协议,所有数据都通过明文传输,即便是只在内网使用也存在一定的安全风险。尤其是对于登录等操作,账号密码通过HTTP协议明文传输是非常不安全的。

而HTTPS协议使用非对称加密的方式对数据进行加密,可以让数据传输变得更加安全可靠。而将HTTP协议切换成HTTPS协议,只需要增加TSL证书即可。

本文使用ACME工具来生成TSL证书,并将TSL证书部署应用于WEB服务,从而实现支持HTTPS协议的WEB服务。

ACME

ACME是The Automatic Certificate Management Environment的缩写,详情可以参阅其 GITHUB官方链接,并且有 中文说明

ACME主要有以下几个功能

  • 向Let’s Encrypt申请证书
  • 支持包括阿里云在内的多个平台,通过多种接口为域名增加TXT解析
  • 将证书部署于web服务
  • 自动更新证书

安装ACME

只需要一行命令就可以安装ACME

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

或者

$ wget -O -  https://get.acme.sh | sh

安装一共包括下面几个步骤

  • 将acme.sh脚本复制到~/.acme.sh路径下
  • 在当前用户的SHELL环境配置文件中增加acme.sh=~/.acme.sh/acme.sh
  • 添加一项crontab定时任务

获取域名服务商的远程管理密钥

以阿里云为例,在用户的管理台中,找到AccessKey,安全起见可以增加一个子用户,并给该子用户添加管理云解析(DNS)的权限

记住AccessKeyID和AccessKeySecret,并运行下面的命令添加相应环境变量

export Ali_Key="AccessKeyID"
export Ali_Secret="AccessKeySecret"

申请证书

在同一个terminal中继续输入下面的命令来生成证书,记得把example.com改成自己的域名

~/.acme.sh/acme.sh --issue --dns dns_ali -d example.com -d *.example.com

注意查看程序运行日志,正常情况可以看到新生成证书的路径。

自动部署

自动把证书部署于WEB服务。

~/.acme.sh/acme.sh --installcert -d example.com \
--key-file /path/to/keyfile \
--fullchain-file /path/to/fullchain \
--reloadcmd "/etc/init.d/uhttpd restart"

本文以OPENWET的管理页面为例,

~/.acme.sh/acme.sh --installcert -d example.com \
--keypath /etc/uhttpd.key \
--fullchainpath /etc/uhttpd.crt \
--reloadcmd "/etc/init.d/uhttpd restart"

自动更新

在安装ACME时就创建了一条crontab定时任务,每天凌晨检查证书是否过期,如果过期的话就会重新申请并自动部署。

前面使用过的申请证书和自动部署的两条命令在运行之后都会记录下来,将来在证书自动更新时就会执行同样的的命令和参数。例如自动部署的命令就保存于~/.acme.sh/example.com目录下的example.com.conf文件里,reloadcmd命令是以base64编码后的形式保存的。

所以只要确保上面申请证书和自动部署的两部操作都正确无误就可以了,后续的更新都会自动进行,不需要额外的操作。

参考文章

自动化部署证书 acme.sh 详细实践使用教程

使用acme.sh实现海量域名SSL证书自动申请与更新

下一页
上一页