Duke Yin's Technology database

使用Lucky给PVE提供泛域名证书

Lucky本身是支持通过ACME申请Let’s Encrypt证书的,如果我们指定了泛域名证书,Lucky就会定期给泛域名续期。如果局域网内存在其他服务也需要证书,直接去拿Lucky申请好的证书就很惬意了,不仅节省了公共资源,也更稳妥。

下面给出Lucky给PVE提供证书的方法:

1 Lucky配置好泛域名证书

Lucky界面进入“SSL/TLS证书”,添加证书,

  • 验证方式选择Cloudflare
  • Token处填写可以编辑该域名的Cloudflare Token
  • 域名列表填写主域名和泛域名,这里举例填写:(改成你自己的域名)
    yins.top
    *.yins.top
  • 后面的“证书映射”启用
  • 映射路径填写一个绝对路径,例如 /tmp/cert_share
  • 如果你还想干点啥,可以在证书变化后触发脚本处写个脚本,不写也不影响。

2 让局域网能访问到证书

Lucky界面进入“web服务”,添加Web服务规则。默认端口是16666,要是有修改的需要也可以自行修改,默认没有占用的话用默认。监听改为仅 IPV4,避免V6公网被访问到。

  • 默认规则不需要改
  • 添加一个子规则,子规则名称随便起一个便于辨认
  • 服务类型选择“文件服务”
  • 前端地址写Lucky主机所在的ip,例如 192.168.2.1
  • 文件挂载路径 点添加挂载设置,挂载类型 本地,本地路径写刚刚映射的路径 /tmp/cert_share,显示名称不用填
  • 然后保存即可

这时候访问http://192.168.2.1:16666/ 就能看见证书文件了。

我们需要的只有yins.top.pem 和 yins.top.key这两个文件。

3 PVE拿取、安装证书

在 PVE 主机上创建一个脚本:

sudo nano /usr/local/bin/update-pve-cert.sh

内容为(证书名称改成你自己的域名):

#!/bin/bash
ACME_SERVER="http://192.168.2.1:16666"
CERT_DIR="/etc/pve/local"
TMP_DIR="/tmp/pve-cert"
mkdir -p "$TMP_DIR"

curl -fsSL "$ACME_SERVER/yins.top.pem" -o "$TMP_DIR/yins.top.pem"
curl -fsSL "$ACME_SERVER/yins.top.key" -o "$TMP_DIR/yins.top.key"

if [[ ! -s "$TMP_DIR/yins.top.pem" || ! -s "$TMP_DIR/yins.top.key" ]]; then
  echo "下载证书失败"
  exit 1
fi

REMOTE_HASH=$(openssl x509 -in "$TMP_DIR/yins.top.pem" -noout -fingerprint)
LOCAL_HASH=$(openssl x509 -in "$CERT_DIR/pve-ssl.pem" -noout -fingerprint 2>/dev/null)

if [[ "$REMOTE_HASH" == "$LOCAL_HASH" ]]; then
  echo "证书未变化,无需更新"
  exit 0
fi

cp "$TMP_DIR/yins.top.pem" "$CERT_DIR/pve-ssl.pem"
cp "$TMP_DIR/yins.top.key" "$CERT_DIR/pve-ssl.key"

systemctl restart pveproxy pvedaemon
echo "证书已更新并重启服务"

赋予执行权限

chmod +x /usr/local/bin/update-pve-cert.sh

测试脚本

sudo /usr/local/bin/update-pve-cert.sh

如果成功的话,刷新后在PVE Web界面,主节点,凭证处就能看到新安装的证书,浏览器查看证书,也能看到所指定的域名证书。

4 定时执行脚本

编辑系统计划任务:

sudo crontab -e

末尾添加一行,例如每周一凌晨 3 点执行:

0 3 * * 1 /usr/local/bin/update-pve-cert.sh >> /var/log/pve-cert.log 2>&1

如此一来,我们的PVE就不需要再自己申请证书,直接用现成的就行。脚本会判断证书是否发生了变化,如果没有,就不执行拉取和重启Web服务的步骤。

举一反三,局域网其他需要证书的服务也可以拉取Lucky给的证书,如果是Debian,照上述方法也OK,这样就不用每一台都建一个ACME去申请证书了。

#

发布评论

评论

标注 * 的为必填项。