前言|为什么选择ACME方法

要想通过TLS/https协议访问自己域名下的服务,就必须申请SSL证书。宝塔面板提供了简单快捷的方法一键申请,但终究不是良好的解决方案。一来宝塔过于臃肿,二来其需要手机实名验证。使用各大云服务商提供的【免费证书】则还需要登录网页、申请、导入证书,未免操作繁琐。更何况这些云服务商提供的ssl证书只能给你很少的自由选择性。

而ACME则很好地解决了这些问题。

系统环境:Debian

准备工作与脚本安装

在开始之前,首先将域名解析到服务器的ip上。

安装

首先安装socat,它是acme所需的组件

apt update
apt install socat -y

然后安装acme脚本

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

脚本安装在用户目录下的.acme.sh(隐藏)文件夹内,使用 . .bashrc 让acme.sh命令生效

接下来使用脚本申请证书

证书申请

首先注册CA账户,将下列命令中的邮箱改为自己的邮箱地址

acme.sh --register-account -m [email protected]

注册成功的输出结果如下
_注册成功

然后申请证书,接下来的方法有多种,根据自己情况选择可用的一种即可

监听80端口申请证书

如果服务器的80端口空闲,且能够访问,可以让acme临时监听80端口,完成验证。执行以下命令即可。将domain.com改为自己的域名

acme.sh --issue -d domain.com --standalone

通过Nginx服务申请

如果服务器上已经安装了nginx,且网页能够正常打开,执行以下命令即可通过nginx验证并申请证书。

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

通过apache服务申请

如果服务器上已经安装了apache,执行以下命令即可通过apache验证并申请证书

acme.sh --issue -d domain.com --apache

如果成功申请了证书,将会看到的输出结果是一长串自己的证书和证书文件存放路径。

安装证书到指定路径

生成的证书文件默认存放在与acme.sh脚本相同文件夹内,大多数情况下不应直接使用该路径下的证书文件,而使用以下命令安装证书到指定路径。

acme.sh --install-cert -d domain.com --key-file <path>privkey.pem --fullchain-file <path>fullchain.pem

其中--key-file <path>privkey.pem指定的为私钥文件,--fullchain-file <path>fullchain.pem为证书文件。

done

善后工作

在安装acme.sh脚本时,它自动为创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。
但由于acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也应当经常更新以保持同步。参考以下命令

acme.sh --upgrade --auto-upgrade  #开启acme的自动更新
acme.sh --upgrade --auto-upgrade 0  #关闭自动更新