申请免费证书


申请免费证书

【增强版 Bash 脚本】:交互选择使用 Cloudflare DNS 或 HTTP 验证,支持三大 CA

#!/bin/bash

echo "====== Acme.sh 证书申请一键脚本 ======"

# ===== 输入基本信息 =====
read -p "请输入你的主域名(如 example.com): " DOMAIN
read -p "是否使用泛域名(*.${DOMAIN})? [y/N]: " WILDCARD
read -p "请输入你的邮箱地址(如 me@example.com): " EMAIL

# ===== 选择 CA 机构 =====
echo -e "\n请选择你要使用的证书颁发机构(CA):"
select CA_PROVIDER in "Let's Encrypt" "ZeroSSL" "Buypass"; do
  case $REPLY in
    1) CA_SERVER="letsencrypt"; break ;;
    2) CA_SERVER="zerossl"; break ;;
    3) CA_SERVER="buypass"; break ;;
    *) echo "请输入 1-3 的数字";;
  esac
done

# ===== 选择验证方式 =====
echo -e "\n请选择验证方式:"
select VERIFY_METHOD in "Cloudflare DNS 验证(推荐用于泛域名)" "Standalone HTTP 验证(监听80端口)"; do
  case $REPLY in
    1) VERIFY_METHOD="dns_cf"; DNS_MODE=true; break ;;
    2) VERIFY_METHOD="standalone"; DNS_MODE=false; break ;;
    *) echo "请输入 1 或 2";;
  esac
done

# ===== 安装 acme.sh =====
if [ ! -d "$HOME/.acme.sh" ]; then
  echo "[+] 安装 acme.sh ..."
  curl https://get.acme.sh | sh
fi

source "$HOME/.acme.sh/acme.sh.env"

# ===== 注册账户 =====
acme.sh --set-default-ca --server $CA_SERVER
acme.sh --register-account -m "$EMAIL"

# ===== 处理域名格式 =====
if [[ "$WILDCARD" =~ ^[Yy]$ ]]; then
  CERT_DOMAIN="*.$DOMAIN"
else
  CERT_DOMAIN="$DOMAIN"
fi

# ===== 如果使用 Cloudflare,输入 Token =====
if [ "$DNS_MODE" = true ]; then
  read -p "请输入你的 Cloudflare API Token: " CF_API_TOKEN
  if [[ -z "$CF_API_TOKEN" ]]; then
    echo "[✗] Token 不能为空!"
    exit 1
  fi
  export CF_Token="$CF_API_TOKEN"
fi

# ===== 执行证书申请 =====
echo "[+] 开始申请证书: $CERT_DOMAIN"

if [ "$DNS_MODE" = true ]; then
  acme.sh --issue --dns "$VERIFY_METHOD" -d "$CERT_DOMAIN" --force
else
  echo "[!] 请确保 80 端口未被占用(如 nginx),或已临时关闭"
  read -p "确认后按回车继续..."
  acme.sh --issue --standalone -d "$CERT_DOMAIN" --force
fi

# ===== 安装证书到系统路径 =====
REAL_DOMAIN="${DOMAIN#*.}"  # 去掉 *.
CERT_DIR="/etc/ssl/$REAL_DOMAIN"
mkdir -p "$CERT_DIR"

acme.sh --install-cert -d "$CERT_DOMAIN" \
  --key-file       "$CERT_DIR/key.pem" \
  --fullchain-file "$CERT_DIR/fullchain.pem" \
  --reloadcmd "echo '[✓] 可配置 nginx reload 命令'" \
  --force

# ===== 自动更新启用 =====
acme.sh --upgrade --auto-upgrade

# ===== 成功信息 =====
echo -e "\n[✓] 证书申请成功!"
echo "私钥路径:      $CERT_DIR/key.pem"
echo "完整证书路径:  $CERT_DIR/fullchain.pem"
echo "自动续期:      已启用(每天检测)"

保存为xxx.sh,执行

chmod +x acme_cert_auto.sh
sudo ./acme_cert_auto.sh

文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
评论
  目录