雅云 - SSL自动更新(acme.sh)
概述
-
雅云服务器上所有的http服务大部分使用不带ssl的普通 http 端口访问,在 WAF 上再包裹为 https,所以只更新 WAF 上对应的证书,WAF主机上执行重载命令即可。
-
单独创建一台主机用于证书管理:ACME(Ubuntu server 24.04 LTS)。系统主要有两个功能:
1.执行 acme.sh 脚本,并使用 cronjob 来自动更新证书;
2.开启NFS共享。
WAF上通过配置装载该 NFS 共享文件来使用证书,其他主机同理;可直接挂载,也可通过 docker volume 挂载。
-
个别服务会在本地也使用 https 访问,例如镜像服务:mirrors.yacloud.net,原因是在防火墙内部使用了内网DNS映射,即在雅云网络下会将 mirrors.yacloud.net 解析为内网地址,所以也需要在内网服务上开启 https访问,并且和 WAF 的证书保持一致。
安装acme.sh
apt update && apt install -y socat cron
git clone https://git.yacloud.net/yacloud/acme.sh
cd acme.sh && ./acme.sh --install
source ~/.bashrc && acme.sh --register-account -m szgs@yacloud.net
acme.sh 快速入门
- 配置阿里云授权码(从阿里云-控制台获取),设置Ali_Key和Ali_Secret(首次使用设置,此后acme.sh会将这两个值保存)
export Ali_Key=XXX
export Ali_Secret=XXX
- 证书申请(需要为多个域名申请证书使用
-d
参数进行配置),域名验证使用 DNS-01 方式
acme.sh --issue --dns dns_ali -d yacloud.net -d www.yacloud.net
- 证书申请成功后,可直接部署至本机,并且指定重载命令:
acme.sh --install-cert -d yacloud.net -d www.yacloud.net \
--key-file /root/safeline/resources/nginx/certs/cert_2.key \
--fullchain-file /root/safeline/resources/nginx/certs/cert_2.crt \
--reloadcmd 'docker exec safeline-tengine nginx -s reload'
- 也可通过 ssh 部署至远程主机:
export DEPLOY_SSH_USER="root"
export DEPLOY_SSH_SERVER=172.168.100.4
export DEPLOY_SSH_KEYFILE=/root/safeline/resources/nginx/certs/cert_2.key
export DEPLOY_SSH_FULLCHAIN=/root/safeline/resources/nginx/certs/cert_2.crt
export DEPLOY_SSH_REMOTE_CMD="docker exec safeline-tengine nginx -s reload"
export DEPLOY_SSH_BACKUP=no
export DEPLOY_SSH_MULTI_CALL="yes"
acme.sh --deploy -d yacloud.net -d www.yacloud.net --deploy-hook ssh
NFS 客户端
-
需要使用 NFS 进行挂载的系统必须安装 NFS 相应模块
-
Ubuntu
apt install -y nfs-common
-
OpenEuler
dnf install -y nfs-utils
docker compose配置使用 nfs(示例)
services:
mirrors-web:
image: nginx
container_name: web
volumes:
- nfs-share:/etc/nginx/certs
volumes:
nfs-share:
driver: local
driver_opts:
type: nfs
o: addr=192.168.1.2,nolock,soft,nfsvers=3
device: ":/share"
其他命令
-
检查证书信息:
openssl x509 -in cert.pem -noout -text
-
重载 WAF:
docker exec safeline-tengine nginx -s reload
-
挂载 NFS 共享文件:
mount -t nfs -o vers=3 192.168.1.2:/share /local/share
-
取消挂载 NFS:
umount 192.168.1.2:/share