再过几天我网站的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
评论 (0)