cert证书核心信息提取shell脚本
AI-摘要
切换
Tianli GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
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
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
作者编辑不易,如有转载请注明出处。完整转载来自https://wangairui.com 网站名称:猫扑linux
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

