RFC 已知偏差清单中文
与相关 RFC 标准已知不一致(含主动设计决策和待修复 bug),供集成方评估兼容性。
一、RFC 5280 — 证书与 CRL
| # |
偏差 |
类型 |
原因/说明 |
| 1 |
serialNumber 可能为负(首位 bit 未清 0) |
bug |
crypto/rand 20 字节全随机,缺少 buf[0] & 0x7f,违反 §4.1.2.2 "正整数" |
| 2 |
CRL thisUpdate 未做单调性保证 |
bug |
未 Round(time.Second) + max(lastThisUpdate, now),时钟回拨可导致 thisUpdate 倒退 |
| 3 |
CRL nextUpdate 只用 thisUpdate + validityDays |
低 |
未考虑签发延迟 |
| 4 |
Critical 标记依赖 profile 模板 |
可用性 |
keyUsage/basicConstraints/eku 等扩展的 critical 标记在各 profile 中手工定义,未统一校验 RFC 5280 要求(§4.2.1.3-9 要求部分扩展必须 critical) |
| 5 |
Policy Mappings 未实现 |
主动放弃 |
仅 CA 间使用,无业务场景 |
| 6 |
Name Constraints 已实现但路径验证未集成 |
阶段 |
扩展已嵌入子 CA 证书,但 Go x509.Verify 不自动校验(需自定义验证器) |
| 7 |
Subject Directory Attributes 未实现 |
主动放弃 |
极少使用 |
| 8 |
CRL Issuer Alternative Name 未实现 |
主动放弃 |
CRL 中不常用 |
| 9 |
Delta CRL / Freshest CRL 未实现 |
主动放弃 |
部署复杂,小规模场景无必要 |
| 10 |
Issuing Distribution Point 未实现 |
主动放弃 |
仅分区 CRL 需要 |
| 11 |
CRL 间接 CRL Certificate Issuer 未实现 |
主动放弃 |
仅间接 CRL 需要 |
二、RFC 3161 — TSA 时间戳协议
| # |
偏差 |
类型 |
原因/说明 |
| 1 |
响应包含完整 CA 链而非仅 TSA 签名证书 |
bug |
违反 §2.4.2 响应最小化原则,过大的响应可能被网关拒绝 |
| 2 |
Email/File/Socket 传输未实现 |
主动放弃 |
仅实现 HTTP(§3.4),其他传输无实际需求 |
| 3 |
systemFailure 错误返回 HTTP 500 而非 PKIFailureInfo |
低 |
RFC 优于 HTTP 错误码,但实践兼容 |
| 4 |
badDataFormat / timeNotAvailable / addInfoNotAvailable 失败码未实现 |
主动放弃 |
场景未触发 |
三、RFC 6960 — OCSP
| # |
偏差 |
类型 |
原因/说明 |
| 1 |
Nonce 未按请求长度等长回显(可能填充/截断) |
bug |
违反 §4.4.1 "回显请求中相同的值" — 应逐字节复制 |
| 2 |
responseExtensions 未填充 |
阻塞 |
Go x/crypto/ocsp 未导出 ResponseExtensions 字段,需 fork |
| 3 |
singleExtensions 仅 Nonce,无其他扩展 |
低 |
仅 Nonce 有实际需求 |
| 4 |
Archive Cutoff 未实现 |
主动放弃 |
可选扩展 |
| 5 |
CRL 引用未实现 |
主动放弃 |
响应本身即为实时状态 |
| 6 |
签名请求验证未实现 |
主动放弃 |
部署中未强制 |
| 7 |
OCSP responseStatus 仅 successful 被使用 |
低 |
malformedRequest/internalError/tryLater/sigRequired/unauthorized 常量已定义但当前代码逻辑未触发 |
四、RFC 8555 — ACME
| # |
偏差 |
类型 |
原因/说明 |
| 1 |
HTTPS 未强制(依赖反向代理) |
主动放弃 |
应用层不做 HTTPS 强制,部署文档说明需反向代理 TLS 终结 |
| 2 |
Content-Type 未检查 |
低 |
接收端宽容策略 |
| 3 |
Subproblems 数组未实现 |
主动放弃 |
RFC 8555 §6.7.1 可选,无实际需求 |
| 4 |
initialIp / createdAt 未记录 |
主动放弃 |
审计日志已有请求来源 IP |
| 5 |
公钥查找账户 URL 未实现 |
主动放弃 |
RFC 8555 §7.3.1 推荐,非强制 |
| 6 |
预授权未实现 |
主动放弃 |
可通过 newOrder 替代 |
| 7 |
服务条款变更通知未实现 |
主动放弃 |
通知机制超出 ACL 范围 |
| 8 |
tls-alpn-01 / device-attest-01 未实现 |
主动放弃 |
无实际需求 |
五、RFC 8894 — SCEP
| # |
偏差 |
类型 |
原因/说明 |
| 1 |
GetNextCACert 返回相同 CA(无轮换) |
低 |
CA 证书未更换时行为正确;更换后需手动更新 |
| 2 |
PENDING 状态不支持,始终同步签发 |
设计决策 |
RFC 8894 §4.4 允许同步模式 |
| 3 |
GetCertInitial/GetCert/GetCRL 同步返回 |
设计决策 |
同 #2 |
| 4 |
SCEP 吊销消息未实现 |
主动放弃 |
可通过 REST API 吊销 |
六、RFC 3628 — TSA 策略要求
| # |
偏差 |
类型 |
原因/说明 |
| 1 |
TSA 实践声明未发布 |
阶段 |
v1.1 规划中 |
| 2 |
TSA 密钥轮换未实现 |
阶段 |
v1.2 规划中 |
| 3 |
无 HSM 支持 |
主动放弃 |
纯软件实现,HSM 可独立部署 |
严重性定义
| 等级 |
含义 |
处理原则 |
| bug |
违反 RFC MUST/SHOULD,可能引起互操作问题 |
P0-P1 修复目标 |
| 阻塞 |
已知但需上游修复后方可解决 |
建立 workaround 文档 |
| 低 |
违反 RFC MAY/可选条款,不影响主流互操作 |
P2 或更低优先级 |
| 主动放弃 |
设计决策,明确不实现 |
不修复,说明理由 |
| 阶段 |
规划中,后续版本实现 |
标注预期版本 |
| 可用性 |
不违反 RFC 但损害可用性 |
最佳实践改进 |