商用密码产品认证证书查询(按状态筛选)
抓取国家密码管理局商用密码产品认证业务网(scctc.org.cn)「查看全部」列表的全部分页数据, 合并每条记录的详情字段,默认仅保留「证书状态 = 有效」的记录,生成 Excel。 支持通过参数指定其他状态(过期 / 注销 / 撤销 / 暂停)或导出全部。
何时使用
- 用户要求获取
scctc.org.cn的「有效」商密证书 / 商用密码认证结果。 - 用户要求按证书状态(有效 / 过期 / 注销 / 撤销 / 暂停)筛选并导出 Excel。
- 用户要更新此前抓取的证书数据(重新跑一遍即可)。
关键事实(必须先读 references)
- 接口与字段映射、状态枚举、SSL 兼容性坑:见
references/scctc_api.md。 - 目标站点不支持按状态服务端筛选,因此先抓全量,再在本地按
certificateStatus枚举过滤。
工作流
0. 准备运行环境
PY="C:/Users/JIT38/.workbuddy/binaries/python/versions/3.13.12/python.exe"
VENV="C:/Users/JIT38/.workbuddy/binaries/python/envs/default"
if [ ! -d "$VENV" ]; then "$PY" -m venv "$VENV"; fi
"$VENV/Scripts/pip.exe" install -q openpyxl
若上述隔离 Python 不可用,改用系统 Python 3.12:
C:/Users/JIT38/AppData/Local/Programs/Python/Python312/python.exe,并自建 venv。
1. 抓取全部分页数据
"$VENV/Scripts/python.exe" scripts/fetch_all.py --out all_records.json --size 50
脚本自动探测总数、遍历所有分页(certificateCategory=1 为商用密码产品认证证书)、
带重试与旧版 TLS 兼容,输出去重校验后的 all_records.json。
列表接口已包含「查看」详情页全部字段,无需逐条二次抓取。
2. 按状态筛选
# 默认筛选「有效」(certificateStatus=0)
"$VENV/Scripts/python.exe" scripts/filter_status.py --in all_records.json --status 0
# 也可指定其他状态:1=过期 2=暂停 3=撤销 4=注销;--status all 表示全部
脚本打印状态分布与筛选数量,输出 cert_status_<代码>.json(全部时为 cert_status_all.json)。
3. 生成 Excel
"$VENV/Scripts/python.exe" scripts/make_excel.py \
--in cert_status_0.json \
--out 商用密码产品认证证书查询结果_有效.xlsx \
--name "商用密码产品认证证书(有效)"
生成 14 列表格,含冻结表头、自动筛选器、状态中文映射、HTML 实体清理。
4. (可选)复制到桌面 / 上传金山文档
cp 商用密码产品认证证书查询结果_有效.xlsx "C:/Users/JIT38/Desktop/"
上传金山文档的 CLI 安装 / 登录 / 上传 / 校验流程,见 scctc-cert-scraper 技能的
references/kdocs_upload.md(同一套 kdocs-cli 流程)。
注意事项
- 目标站点为旧版服务器,必须启用
OP_LEGACY_SERVER_CONNECT与SECLEVEL=1,否则 SSL 握手失败(fetch_all.py已内置)。 - 接口有频率限制,脚本已内置 0.15s 间隔与失败重试;如触发限流可适当调大
time.sleep。 - 证书状态字段为枚举(0=有效 …4=注销),Excel 中已转中文。
- 截至 2026-07,类别 1 共约 10,572 条,212 页(size=50),全量抓取约 1 分钟。
Scan to join WeChat group