某单位电子公文系统升级后,接收方一打开红头文件就弹「签章不可信,数字签名验证失败」,办公室把 IT 叫过去:发出去的公文别人不敢收。查了下归档库,几十份要归档的公文全卡在「签名无效」。先看现场:
bash
# 现场排查:电子公文签章验证失败(示意)
# 1) 签章证书算法
openssl x509 -in seal.crt -noout -text 2>/dev/null | grep -i "Signature Algorithm"
# → sha256WithRSAEncryption → 非国密 SM2,签章不被认可
# 2) 验章失败日志
grep -c "签名无效\|verify.*fail" /var/log/seal/app.log 2>/dev/null
# → 高 → 大量公文签名验证失败,归档环节卡死
电子公文不是"加了密码的 Word",国家有强制标准:党政机关电子公文必须包含数字签名或电子签章,承载格式是 OFD,签章走国密 SM2/SM3。签名算法不对、介质不对、链路不通,公文发出去就是无效的。这篇按「为什么必须国密 → 现场三类问题 → 改造三步 → 落地避坑 → 验收」拆:
- 一、电子公文为什么必须国密签名
- 二、现场:电子公文系统三类常见问题
- 三、改造三步:SM2 证书体系 → UKEY 签章介质 → 验章链路
- 四、落地:OA 集成与常见坑
- 五、验收清单:逐项验证做对了
一、电子公文为什么必须国密签名
电子公文的合规依据,一文件一标准一张法:
| 依据 | 要求 |
|---|---|
| GB/T 33476-2016《党政机关电子公文格式规范》 | 电子公文承载格式为 OFD(GB/T 33190),必须包含数字签名或电子签章,签名文件夹(Signs)承载 |
| GB/T 33481-2016《党政机关电子印章应用规范》 | 电子印章按实物公章管理模式制章、用章、验章,加盖电子印章的电子公文与纸质公文具有同等效力 |
| 《电子签名法》 | 可靠电子签名与手写签名或盖章具有同等法律效力 |
| 等保三级 | 政务 OA 系统身份鉴别双因素、公文完整性可校验 |
关键认知 :电子公文的"有效"不只是内容对,是签章链路的有效 ------证书算法、签章介质、验章环节全链条合规,公文才有法律效力。而国密改造的核心就三件事:证书换 SM2、介质换 UKEY、验章链路接通。
二、现场:电子公文系统三类常见问题
电子公文系统国密改造前,最常见三类现场:
| 问题 | 现场 | 后果 |
|---|---|---|
| ① 证书非国密 | 签章证书还是 RSA,算法 sha256WithRSA | 签章不被认可,验章失败 |
| ② 签章介质是口令 | 印章绑定普通口令,没有硬件介质 | 身份不可靠,双因素不达标 |
| ③ 验章链路断 | 验章组件不认 SM2 算法,摘要比对不过 | 公文发出去别人验不了 |
关键认知:三类问题的根子是**"签名体系没按国密重建"**------不是换张证书就完事,是证书、介质、验章三条链路一起换。改造时按「证书体系 → 签章介质 → 验章链路」三步走,一条线补齐。
三、改造三步:SM2 证书体系 → UKEY 签章介质 → 验章链路
第 1 步:SM2 证书体系
- 电子公文系统统一签发 SM2 证书(签名证书),算法 SM2-SM3
- 证书由 安当 HSM(签名验签服务器)签发,私钥锁硬件、不可导出
- 全系统密钥与证书收进 安当 KSP 统一管理,签发/吊销/轮换留痕
bash
# 验证签章证书算法已换国密(示意)
openssl x509 -in seal.crt -noout -text 2>/dev/null | grep -i "Signature Algorithm"
# → 输出 sm2WithSM3 → 签章证书为国密 SM2 证书 ✓
第 2 步:UKEY 签章介质
- 印章/签名操作绑定 安当 UKEY(SM2 私钥载体),插入即签章
- UKEY 替代口令:谁签章、哪枚章、什么时间,硬件绑定、不可冒用
- 登录 OA 走 安当 ASP 统一认证,UKEY 作为第二因素,签章操作全程身份可溯
bash
# 验证无 UKEY 不能签章(示意)
./seal_tool --sign --seal 办公室 2>&1 | grep -c "请插入\|缺少证书"
# → >0 → 无硬件介质不能签章,双因素生效 ✓
第 3 步:验章链路
- 验章组件按签章文件的 Provider/算法信息匹配本地签章组件
- 按 References 节点重新计算摘要(SM3)与存储摘要比对,摘要差异即提示"文档已改动"
- 归档环节校验签名,未签名/验章失败的公文拦截归档
bash
# 验证验章摘要比对(示意)
./seal_tool --verify red_head.ofd 2>&1 | grep -c "通过\|验证成功"
# → >0 → 验章链路通,签名有效 ✓
关键认知:三步的实质是**"证书国密 + 介质硬件 + 验章可信"**------HSM 管签名运算、KSP 管密钥证书、UKEY 管身份介质,公文从签发到归档全程可验。别只换证书不换介质,也别装了介质不接验章。
四、落地:OA 集成与常见坑
改造落到 OA 系统,四个常见坑先避开:
| 坑 | 避坑 |
|---|---|
| 签章组件不认国密 | 选支持 SM2/SM3 的签章组件,Provider 信息对齐 |
| 证书私钥落应用 | 私钥一律锁 HSM/UKEY,应用不裸存密钥 |
| 验章只在本地 | 收发双方验章链路都要通,跨单位公文可互验 |
| 归档不校验签名 | 归档前跑一遍签名校验,无效公文拦截 |
bash
# 自查:应用是否裸存私钥(示意)
find /opt/oa -name "*.key" -o -name "*.pem" 2>/dev/null | grep -c "seal\|sign"
# → 0 → 应用无裸存私钥,密钥在 HSM/UKEY ✓
关键认知:OA 集成的核心是**「验章链路跨单位要通」**------政务公文的流转不止在单位内部,上级、平级单位都要能验证你发的公文。所以证书体系、验章组件要按标准接口对齐(应用接口 GB/T 33478、交换接口 GB/T 33479),别做成"本单位自嗨"。
五、验收清单:逐项验证做对了
| # | 验收项 | 验证方法 | 达标判定 |
|---|---|---|---|
| 1 | 签章证书国密 | 查证书算法 | sm2WithSM3 |
| 2 | 私钥锁硬件 | pkcs11-tool --extract |
报错不可导出 |
| 3 | 无 UKEY 不能签章 | 拔 UKEY 签章 | 签章被拒绝 |
| 4 | 验章摘要比对 | 改动 OFD 后验章 | 提示文档已改动 |
| 5 | 跨单位可验章 | 上级单位验章测试 | 验证通过 |
| 6 | 归档校验 | 未签名公文归档 | 被拦截 |
| 7 | 密钥集中 | 查 KSP 审计日志 | 签发/吊销留痕 |
| 8 | 身份双因素 | 登录 OA 拔 UKEY | 登录被拒绝 |
| 9 | 标准对应 | 对照 GB/T 33476/33481 | 签名/签章要求逐条达标 |
对着这份清单,把你们 OA 系统过一遍:查一次签章证书算法、试一次拔 UKEY 签章、验一次改动过的公文。政务 OA 国密改造的答案是「GB/T 33476/33481 + 电子签名法 」这条线------公文必须含数字签名或电子签章、电子印章与纸质公文同等效力,落地守「证书换 SM2(HSM 签发)+ 介质换 UKEY + 验章链路通(KSP 管密钥)」三步。你单位 OA 卡在哪------证书还是 RSA、签章还是口令、还是跨单位验不了章?评论区说说,一起拆。
文章作者:安当加密技术负责人