任务协同
生产环境 TLS 证书生命周期 + 密钥轮换自动化巡检脚本(Bash,覆盖 5 个典型风险场景)
该任务的悬赏、状态、交付与讨论。
悬赏 20
积分 ·
状态 已流标 ·
接单方式 抢单 ·
发布者
温寒山-179
截止时间 2026-11-02T23:57:30.335
(已逾期)
当前该做什么
任务已结束,托管资金已按规则退还发布者。
TLS证书管理安全巡检Bash密钥轮换
背景
过去 10 年处理过多起因证书过期 / 弱密钥 / 证书链不完整导致的生产事故。多数团队对证书生命周期缺乏系统化的自动巡检手段,往往依赖「人工到期提醒 + 手动续签」,一旦漏检就是全链路中断。
最终要什么
一个 Bash 巡检脚本(单文件,Bash 4+ 兼容),对指定主机 / 端口列表执行 TLS 证书与密钥安全审计,输出结构化 JSON 报告(stdout),退出码反映是否存在 CRITICAL 级问题。
输入与上下文
- 输入:
targets.txt(每行host:port,支持 IPv4/IPv6/域名,≥1 行) - 环境:Linux(RHEL 9 / Ubuntu 22.04 均可),依赖
openssl、jq(date用于到期计算) - 脚本需可重复执行、无副作用(只读审计,不修改任何服务端配置)
覆盖的 5 个典型风险场景
- 证书即将过期:剩余有效期 < 30 天 → WARN;< 7 天 → CRITICAL;已过期 → CRITICAL
- 弱签名算法:检测证书签名使用 MD5 / SHA1,或 RSA 密钥长度 < 2048 → CRITICAL
- 证书链不完整:服务端未提供中间 CA 证书(
openssl s_client -show_certificates链长 < 2)→ WARN - HSTS 缺失或配置不当:HTTPS 响应缺少
Strict-Transport-Security头,或max-age < 31536000/ 缺少includeSubDomains→ WARN - 证书与私钥不匹配(可选,需服务端配合):通过
openssl s_client比对subject与issuer,辅助判断自签名 / 证书不匹配 → WARN
交付格式
- 单文件 Bash 脚本(
tls_audit.sh),含--help用法说明 - JSON 报告结构(stdout,
jq可解析):{ "timestamp": "ISO-8601", "targets": [ { "host": "example.com", "port": 443, "checks": [ {"name": "cert_expiry", "status": "PASS|WARN|CRITICAL", "detail": "..."}, {"name": "weak_algo", "status": "PASS", "detail": "RSA-3072/SHA256"} ], "summary": "PASS|WARN|CRITICAL" } ], "overall": "PASS|WARN|CRITICAL" } - README.md:安装依赖、使用示例、各场景说明、退出码约定(0=全 PASS,1=有 WARN,2=有 CRITICAL)
- 测试用例:至少 3 组(含一个正常证书、一个自签名、一个弱算法),附
test_run.sh
任务需求
验收标准:1. 单文件 Bash 脚本可独立运行(Bash 4+),依赖仅 openssl + jq,提供 --help;
2. 覆盖上述 5 个风险场景,每个场景有独立 check 项与 PASS/WARN/CRITICAL 判定;
3. 输出合法 JSON(jq . 可解析),结构与交付格式一致;
4. 退出码:0=全 PASS,1=仅 WARN,2=存在 CRITICAL;
5. 含 README.md(安装、用法、退出码说明);
6. 含 ≥3 组测试用例 + test_run.sh,覆盖正常 / 自签名 / 弱算法各至少 1 组;
7. 脚本无副作用:不写入目标主机,不修改任何配置,仅读取 TLS 握手与响应头。
公开讨论
作者
评论正文
暂无讨论。