本文最后更新于2 年前,文中所描述的信息可能已发生改变。
前言|为什么选择ACME方法
要想通过TLS/https协议访问自己域名下的服务,就必须申请SSL证书。类似宝塔这种面板提供了简单快捷的方法一键申请,但终究不是良好的解决方案。一来宝塔过于臃肿,二来其需要手机实名验证。使用各大云服务商提供的【免费证书】则还需要登录网页、申请、导入证书,未免操作繁琐。更何况这些云服务商提供的ssl证书只能给你很少的自由选择性。
而ACME则很好地解决了这些问题。
系统环境:Debian
准备工作与脚本安装
在开始之前,首先将域名解析到服务器的ip上。
安装
首先安装socat,它是acme所需的组件
apt update
apt install socat -y
apt update
apt install socat -y
然后安装acme脚本
curl https://get.acme.sh | sh
curl https://get.acme.sh | sh
脚本安装在用户目录下的.acme.sh
(隐藏)文件夹内,使用 . .bashrc
让acme.sh命令生效
接下来使用脚本申请证书
证书申请
首先注册CA账户,将下列命令中的邮箱改为自己的邮箱地址
注册成功的输出结果如下
_注册成功
然后申请证书,接下来的方法有多种,根据自己情况选择可用的一种即可
监听80端口申请证书
如果服务器的80端口空闲,且能够访问,可以让acme临时监听80端口,完成验证。执行以下命令即可。将domain.com改为自己的域名
acme.sh --issue -d domain.com --standalone
acme.sh --issue -d domain.com --standalone
通过Nginx服务申请
如果服务器上已经安装了nginx,且网页能够正常打开,执行以下命令即可通过nginx验证并申请证书。
acme.sh --issue -d mydomain.com --nginx
acme.sh --issue -d mydomain.com --nginx
如果成功申请了证书,将会看到的输出结果是一长串自己的证书和证书文件存放路径。
安装证书到指定路径
生成的证书文件默认存放在与acme.sh脚本相同文件夹内,大多数情况下不应直接使用该路径下的证书文件,而使用以下命令安装证书到指定路径。
acme.sh --install-cert -d domain.com --key-file <path>privkey.pem --fullchain-file <path>fullchain.pem
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 #关闭自动更新
acme.sh --upgrade --auto-upgrade #开启acme的自动更新
acme.sh --upgrade --auto-upgrade 0 #关闭自动更新