使用Acme做https证书申请
Github:https://github.com/acmesh-official/acme.sh
1. 安装acme.sh
# 安装
curl https://get.acme.sh | sh
# 给脚本起别名
alias acme.sh=~/.acme.sh/acme.sh
# 验证是否安装成功,出现版本号表示安装成功
acme.sh -v
2. 生成证书
2.1 原理机制
运行生成证书的命令之前需要先了解他的原理机制:
-
先在
webroot
下创建目录:.well-known/acme-challenge
并在此目录生成一个校验文件(例如:agww2B-ty--atKNEn_2tfTB32US0mNfoeahd3DpA8F4
) -
再通过访问
url
来校验“这台服务器是不是你的?”。例如访问 http://mkii.com/.well-known/acme-challenge/agww2B-ty–atKNEn_2tfTB32US0mNfoeahd3DpA8F4 能得到上一步生成的文件
-
校验通过才会生成证书
2.2 Nginx 配置修改(可选)
做这一步的目的是:我不想把验证文件放在我的网站的目录里边,我使用 Nginx 切换验证文件的位置。所以我指定域名生成的校验文件统一存储在 /opt/ssl-auth
目录,这样我需要在 Nginx 的配置中指定获取校验文件需要到 /opt/ssl-auth
来获取。
Nginx 配置:
匹配以 /.well-known/acme-challenge/
开头的请求,也就是说:
访问 http://mkii.com/.well-known/acme-challenge/agww2B-ty–atKNEn_2tfTB32US0mNfoeahd3DpA8F4,会去到 /opt/ssl-auth
找 .well-known/acme-challenge/agww2B-ty--atKNEn_2tfTB32US0mNfoeahd3DpA8F4
location ^~ /.well-known/acme-challenge/ {
root /opt/ssl-auth/;
}
2.3 运行生成证书命令
acme.sh --issue -d mkii.com -webroot /opt/ssl-auth/
运行命令,校验成功之后会在/root/.acme.sh/mkii.com/目录生成一些证书文件。注意这里的证书文件不能直接使用,影响在下一步使用
申请成功会打印类似以下的日志
[Wed Mar 10 09:23:51 UTC 2021] Your cert is in /root/.acme.sh/mkii.com/mkii.com.cer
[Wed Mar 10 09:23:51 UTC 2021] Your cert key is in /root/.acme.sh/mkii.com/mkii.com.key
[Wed Mar 10 09:23:51 UTC 2021] The intermediate CA cert is in /root/.acme.sh/mkii.com/ca.cer
[Wed Mar 10 09:23:51 UTC 2021] And the full chain certs is there: /root/.acme.sh/mkii.com/fullchain.cer
3. 安装证书
基于上一步生成的内部证书文件,生成正式的证书文件,并拷贝到 --key-file
和 --fullchain-file
配置的路径。最后运行强制 reload Nginx,目的是 load 到证书文件。
acme.sh --install-cert -d mkii.com \
--key-file /etc/nginx/ssl/mkii.com.key.pem \
--fullchain-file /etc/nginx/ssl/mkii.com.cert.pem \
--reloadcmd "service nginx force-reload"
4. 更新证书
目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.(未测试)