胖蒜

分享有价值的资源

SSL证书生成及自动续签+同步到宝塔面板的解决方案

再过几天我网站的SSL证书就到期了,每次续签最多就90天,真是太麻烦了,我之前使用的是httpsok提供的解决方法,现在赠送的权益用完了,就只能自己想办法了,因为域名下面的子域名比较多,一个一个续签太麻烦了,所有采用通配符证书才是最完美的解决方案。
因为我网站管理采用的宝塔面板,所以生成的证书要同步到宝塔指定的文件夹里面,下面是我的解决方案和操作步骤,因为是事后写的,可能有问题,以后发现了再纠正。

一、安装 acme.sh

# 方法1:使用 gitee 镜像(推荐)
curl -o acme.sh https://gitee.com/neilpang/acme.sh/raw/master/acme.sh
chmod +x acme.sh
./acme.sh --install

# 方法2:如果上述方法失败,使用 GitHub 镜像
curl -o acme.sh https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh
chmod +x acme.sh
./acme.sh --install

# 加载环境变量
source ~/.bashrc

# 验证安装
acme.sh --version

配置腾讯云 DNSPod API 凭证

因为我的域名放在腾讯云,你如果放在其它地方,请做相应修改。

# 配置全局 API 凭证(永久保存)
export DP_Id="你的_SecretId"
export DP_Key="你的_SecretKey"

# 或者将凭证写入配置文件(推荐)
sudo mkdir -p /etc/letsencrypt/.secrets
sudo tee /etc/letsencrypt/.secrets/dnspod.ini > /dev/null <<EOF
DP_Id="你的_SecretId"
DP_Key="你的_SecretKey"
EOF

# 设置严格权限
sudo chmod 600 /etc/letsencrypt/.secrets/dnspod.ini
sudo chown root:root /etc/letsencrypt/.secrets/dnspod.ini

三、首次申请通配符证书

# 申请通配符证书

# 方法1:设置默认 CA 为 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt

# 方法2:或者在申请证书时直接指定
acme.sh --issue --dns dns_dp -d "example.com" -d "*.example.com" --server letsencrypt

# 然后按照提示手动添加 DNS 记录

# 验证 DNS 记录
dig TXT _acme-challenge.pangsuan.com +short

# 继续申请
acme.sh --renew -d "pangsuan.com" --force

四、通过宝塔面板界面手动添加

# 查看证书存放位置
acme.sh --list

# 通常证书路径在:
# ~/.acme.sh/pangsuan.com/pangsuan.com.cer     # 证书文件
# ~/.acme.sh/pangsuan.com/pangsuan.com.key     # 私钥文件
# ~/.acme.sh/pangsuan.com/ca.cer               # 中间证书
# ~/.acme.sh/pangsuan.com/fullchain.cer        # 完整证书链

五、在宝塔面板中添加证书

使用脚本自动同步到宝塔,创建自动同步脚本:

sudo tee /opt/scripts/sync_cert_to_bt.sh > /dev/null <<'EOF'
#!/bin/bash

DOMAIN="pangsuan.com"
BT_CERT_DIR="/www/server/panel/vhost/cert/$DOMAIN"
ACME_CERT_DIR="$HOME/.acme.sh/$DOMAIN"

echo "开始同步证书到宝塔面板..."

# 创建宝塔证书目录
sudo mkdir -p "$BT_CERT_DIR"

# 复制证书文件到宝塔目录
sudo cp "$ACME_CERT_DIR/fullchain.cer" "$BT_CERT_DIR/fullchain.pem"
sudo cp "$ACME_CERT_DIR/$DOMAIN.key" "$BT_CERT_DIR/privkey.pem"
sudo cp "$ACME_CERT_DIR/$DOMAIN.cer" "$BT_CERT_DIR/cert.pem"

# 设置权限
sudo chown www:www "$BT_CERT_DIR"/*
sudo chmod 644 "$BT_CERT_DIR"/*

echo "证书文件已同步到宝塔目录: $BT_CERT_DIR"
echo "文件列表:"
sudo ls -la "$BT_CERT_DIR"

# 重载 Nginx
sudo /etc/init.d/nginx reload

echo "证书同步完成!"
EOF

chmod +x /opt/scripts/sync_cert_to_bt.sh

运行同步脚本:

/opt/scripts/sync_cert_to_bt.sh

六、完整的自动化方案

创建完整的自动化脚本,包含申请证书和部署到宝塔:

sudo tee /opt/scripts/auto_cert_bt.sh > /dev/null <<'EOF'
#!/bin/bash

DOMAIN="pangsuan.com"
EMAIL="your-email@example.com"
BT_CERT_DIR="/www/server/panel/vhost/cert/$DOMAIN"

echo "=== 开始自动证书申请和宝塔部署 ==="

# 1. 申请或续签证书
echo "步骤1: 申请/续签证书..."
acme.sh --issue --dns dns_dp \
  -d "$DOMAIN" \
  -d "*.$DOMAIN" \
  --force

# 2. 创建宝塔证书目录
echo "步骤2: 准备宝塔证书目录..."
sudo mkdir -p "$BT_CERT_DIR"

# 3. 复制证书文件
echo "步骤3: 复制证书文件..."
sudo cp ~/.acme.sh/$DOMAIN/fullchain.cer $BT_CERT_DIR/fullchain.pem
sudo cp ~/.acme.sh/$DOMAIN/$DOMAIN.key $BT_CERT_DIR/privkey.pem
sudo cp ~/.acme.sh/$DOMAIN/$DOMAIN.cer $BT_CERT_DIR/cert.pem

# 4. 设置权限
echo "步骤4: 设置文件权限..."
sudo chown www:www $BT_CERT_DIR/*
sudo chmod 644 $BT_CERT_DIR/*

# 5. 重载 Web 服务
echo "步骤5: 重载 Nginx..."
sudo /etc/init.d/nginx reload

# 6. 验证部署
echo "步骤6: 验证证书..."
sudo openssl x509 -in $BT_CERT_DIR/fullchain.pem -noout -subject -dates

echo "=== 自动部署完成 ==="
echo "证书位置: $BT_CERT_DIR"
echo "文件列表:"
sudo ls -la $BT_CERT_DIR
EOF

chmod +x /opt/scripts/auto_cert_bt.sh

运行自动化脚本:

/opt/scripts/auto_cert_bt.sh

七、验证部署是否成功

部署完成后进行验证:

# 验证证书是否生效
curl -I https://pangsuan.com

# 检查证书信息
openssl s_client -connect pangsuan.com:443 -servername pangsuan.com < /dev/null | openssl x509 -noout -dates

八、设置自动续签和自动部署

配置 acme.sh 在续签后自动更新宝塔证书:

# 编辑续签配置
acme.sh --install-cert -d "pangsuan.com" \
  --key-file /www/server/panel/vhost/cert/pangsuan.com/privkey.pem \
  --fullchain-file /www/server/panel/vhost/cert/pangsuan.com/fullchain.pem \
  --reloadcmd "/opt/scripts/sync_cert_to_bt.sh"

本文属原创,转载请注明原文:https://pangsuan.com/p/ssl_auto_to_bt.html

感觉很棒,欢迎点赞 OR 打赏~

分享到:

评论 (0)

立即登录评论
马上咨询 在线工单