3

acme.sh是个强大的脚本,可以自动申请、更新网站证书,有了它以后再也不需要为证书过期而发愁了。

本文展示如何在FreeBSD下使用acme.sh安装并更新证书。

acme.sh: 使用纯shell编写的基于ACME协议的证书安装、更新的跨平台脚本。

下载并安装acme.sh

首先,我们使用su切换到root

acme.sh提供了几种下载方法,可以使用curl,wgetgit的方式。前两种方式未验证,使用方法官方指导如下:

$ curl https://get.acme.sh | sh -s email=my@example.com

$ wget -O -  https://get.acme.sh | sh -s email=my@example.com

本文使用的git方式进行安装:

$ git clone https://github.com/acmesh-official/acme.sh.git --depth=1
$ cd ./acme.sh
$ ./acme.sh --install -m my@example.com

此时将自动完成以下操作:

  1. 当前用户目录下创建.acme.sh文件夹,该文件夹中存放在acme.sh相关文件,并且以后安装的证书文件将自动存在在 ~/.acme.sh文件夹中.
  2. 创建了一个全局命令:acme.sh,该命令指向~/.acme.sh/acme.sh
  3. 创建了一每天自动执行一次的定时任务(可以通过crontab -e查看)。

接着我们重新登录一下服务器,或是执行bash重新初始化一下shell的环境,以使得acme.sh这个全局命令生效。

请求证书

在请求证书时,发放证书的机构需要验证我们是否为该域名的拥有者。所以在请求证书时,发放证书的机构会向我们提供的域名(默认为80端口)上请求一个指定的文件,如果这个文件存在且内容与预期相同,则认为用户(我们)拥有该域名。

所以在使用请求证书的命令前,首先需要保证请求域名的80端口在当前执行脚本的服务器上。当然了,如果我们的配置简单,acme.sh还能够自动读取apache或nginx等典型http服务的配置,并会为我们自动执行这一切,很遗憾笔者的环境并不是配置简单的环境,所以接下来展示如何手动请求。

acme.sh --issue -d example.com --webroot /root/of/web --debug
  • example.com 替换为你的域名
  • /root/of/web应该替换为你的域名(比如example.com)对应站点的根目录

acme.sh执行过程中,会先往/root/of/web生成一个随机文件,比如为random.txt,然后在向http://example.com/random.txt发起访问已获取到这个文件。所以证书请求成功的前提是上述两项配置正确。

--debug

debug可以更详细的查看到请求证书的过程,特别是在请求出错的时候。

--server证书服务商

acme提供了多种服务商供选择,所以在请求证书发生Timeout时,可以尝试换个服务商。比如acme默认的服务商是zerossl,如果在的网络中请求证书时发生了timeout,则可以参考服务端列表切换为其它的服务端,比如:letsencrypt使用方法为在请求时加入: --server letsencrypt 参数。

安装证书

证书成功请求后,便可以安装证书了,以笔者使用的nginx服务为例:

acme.sh --install-cert -d example.com \
--key-file       /website/ssl-key/key.pem  \
--fullchain-file /website/ssl-key/cert.pem \
--reloadcmd     "nginx -s reload" --ecc

此时则会在/website/ssl-key下生成私钥key.pem及证书cert.pem.

然后我们在nginx中指定上述私角及证书的位置即可。

此后,我们便坐等证书的自动更新吧。

总结

在操作时笔者遇到了小的问题,在这里强调一下:

  1. 安装完acme.sh后,需要重新初始化shell环境,否则在全局中找不到acme.sh。
  2. 在请求证书时,如果当前网站已经启用了证书,则必须保证证书处于有效状态,所以会导致请求随机文件时失败。解决的方法是临时禁用80向443的跳转。
  3. 在请求证书时,由于未知的原因,请求到的证书文件夹有_ecc(Elliptic Curve Cryptography(椭圆曲线密码学))后缀。所以我在安装证书时,加入了--ecc参数。

另:椭圆曲线密码学挺有意思的,有时间的同学可以深入了解一下,在数字货币中也有它的身影。

参考资料

acme.sh
【密码学】椭圆曲线密码 ECC


潘杰
3.1k 声望238 粉丝

引用和评论

0 条评论