sudo tee /data/scripts/check_cert.sh > /dev/null << 'EOF'
#!/bin/bash
# 适配 OpenSSL 1.0.x,同时支持「无子目录/有子目录」双场景
# 无子目录 → 仅扫当前目录;有子目录 → 递归扫描所有子目录

# 脚本标题
echo "============================================"
echo "      📜 证书核心信息批量提取工具(通用版)"
echo "============================================"

# 交互式获取证书目录
read -p "🔍 请输入证书目录(绝对路径/相对路径,如:/opt/certs 或 .):" CERT_DIR

# 校验目录是否存在
while [ ! -d "$CERT_DIR" ]; do
    echo -e "❌ 错误:输入的目录不存在 → $CERT_DIR\n"
    read -p "🔍 请重新输入有效的证书目录:" CERT_DIR
done

# 标准化目录路径
CERT_DIR=$(realpath "$CERT_DIR")
echo -e "\n✅ 确认目录:$CERT_DIR"
echo "🔍 扫描规则:自动扫描该目录【及所有子目录】(若无子目录则仅扫描当前目录)"
echo "--------------------------------------------"

# 核心扫描逻辑(天然兼容双场景):
# - 无子目录 → 仅扫当前目录;有子目录 → 递归扫描所有子目录
crt_files=$(find "$CERT_DIR" -type f -name "*.crt" | sort)
crt_count=$(echo "$crt_files" | wc -l)

if [ "$crt_count" -eq 0 ]; then
    echo -e "❌ 目录 $CERT_DIR 及其子目录下未找到任何 .crt 格式的证书文件"
    echo "============================================"
    exit 1
fi

# 统计子目录数量(用于友好提示)
subdir_count=$(find "$CERT_DIR" -mindepth 1 -type d | wc -l)
if [ "$subdir_count" -eq 0 ]; then
    echo -e "📊 共扫描到 $crt_count 个 .crt 证书文件(当前目录,无子目录),开始提取信息...\n"
else
    echo -e "📊 共扫描到 $crt_count 个 .crt 证书文件(含 $subdir_count 个子目录),开始提取信息...\n"
fi

# 遍历提取每个证书信息
echo "$crt_files" | while read -r crt; do
    [ -z "$crt" ] || [ ! -f "$crt" ] && continue

    crt_name=$(basename "$crt")
    crt_dir=$(dirname "$crt")
    # 区分「当前目录」和「子目录」的展示文案
    if [ "$crt_dir" = "$CERT_DIR" ]; then
        dir_tip="当前目录"
    else
        dir_tip="子目录 [$crt_dir]"
    fi

    echo "========================================"
    echo "📄 证书文件:$crt_name"
    echo "📂 所在位置:$dir_tip"
    echo "📑 完整路径:$crt"
    echo "========================================"
    
    # 1. 提取颁发者(Issuer)
    echo -e "\n【1. 颁发者(Issuer)】"
    openssl x509 -in "$crt" -noout -issuer 2>/dev/null || echo "   无法提取颁发者信息"
    
    # 2. 提取有效期(Validity)
    echo -e "\n【2. 有效期(Validity)】"
    openssl x509 -in "$crt" -noout -dates 2>/dev/null || echo "   无法提取有效期信息"
    
    # 3. 提取使用者(Subject)
    echo -e "\n【3. 使用者(Subject)】"
    openssl x509 -in "$crt" -noout -subject 2>/dev/null || echo "   无法提取使用者信息"
    
    # 4. 提取 SAN(终极精准:仅输出 IP/DNS 行)
    echo -e "\n【4. IP/DNS 备用名称(SAN)】"
    san_info=$(openssl x509 -in "$crt" -noout -text 2>/dev/null | \
               awk '
                   /X509v3 Subject Alternative Name/ {flag=1; next}
                   flag && /IP Address:|DNS:/ {print $0; flag=0; next}
                   /Signature Algorithm/ {flag=0; next}
               ' | sed -e 's/^[ \t]*//' -e '/^$/d')
    
    if [ -z "$san_info" ]; then
        echo "   无 SAN 扩展信息"
    else
        echo "$san_info" | sed 's/^/   /'
    fi
    
    echo -e "\n----------------------------------------\n"
done

# 执行完成提示(适配双场景)
if [ "$subdir_count" -eq 0 ]; then
    echo "✅ 所有证书信息提取完成!(当前目录,无子目录)"
else
    echo "✅ 所有证书信息提取完成!(含 $subdir_count 个子目录)"
fi
echo "📌 扫描目录:$CERT_DIR"
echo "📌 证书总数:$crt_count 个"
echo "============================================"
EOF

# 赋予执行权限+修正属主
sudo chmod +x /data/scripts/check_cert.sh
sudo chown admin.admin /data/scripts/check_cert.sh