PKIX 时间戳与 318 端口
318 端口的 IANA 登记名是 pkix-timestamp,对应 RFC 3161 定义的时间戳协议,也就是时间戳权威服务。客户端先对数据做哈希,把哈希提交给 TSA,由 TSA 用私钥签名并返回带可信时间的时间戳令牌。由于签名绑定哈希值与签发时间,事后任何人都能验证该数据在某个时刻之前已经存在,它是代码签名、电子存证与审计留痕的基础组件。
基本信息
| 服务 | pkix-timestamp(RFC 3161 时间戳权威) |
|---|---|
| 端口/协议 | TCP/UDP 318 |
| 报文格式 | ASN.1 DER 编码的请求与响应 |
| HTTP 媒体类型 | application/timestamp-query 与 reply |
| 常见实现 | OpenSSL ts 工具、CA 机构与合规时间戳服务 |
| 处置原则 | 仅授权客户端可达,校验 TSA 证书链 |
典型使用场景
- 代码签名:为签名附加可信时间,避免签名证书过期后失效
- 电子存证:证明文件在争议发生前已存在且未被修改
- 审计留痕:为日志摘要打时间戳,防止事后篡改
- 合规场景:满足对时间源可信性有明确要求的行业规范
- 集成测试:在自建 TSA 上验证请求与响应流程
请求与验证
请求与验证
openssl ts -query -data file.txt -sha256 -out request.tsq # 生成时间戳请求
# 提交给 TSA:媒体类型为 application/timestamp-query
curl -s -H 'Content-Type: application/timestamp-query' --data-binary @request.tsq -o response.tsr http://tsa.example.com/
openssl ts -reply -in response.tsr -text | head -30 # 查看响应内容与时间
openssl ts -verify -in response.tsr -queryfile request.tsq -CAfile tsaca.pem # 验证签名
# 验证失败时把 TSA 证书链与中间证书一并补进 CAfile 再重试验证要点
| 校验项 | 含义 | 失败表现 |
|---|---|---|
| 签名有效性 | TSA 私钥对响应签名 | 验证直接报签名错误 |
| 证书链 | TSA 证书由可信 CA 签发 | 缺根证书或中间证书即失败 |
| 哈希一致性 | 响应绑定的哈希与请求一致 | 提示查询与响应不匹配 |
| 时间与策略 | 时间戳值符合策略与精度要求 | 需按业务规则人工判定 |
公开 TSA 通常经 HTTP 提交请求,318 是 IANA 注册的专用端口,实际部署更多走 80 或 443。跨组织使用时先获取对端证书链,否则验证环节会因缺根证书直接失败。
时间戳的可信度取决于 TSA 本身:自建且私钥管理不严的 TSA,相当于把可信时间交由自己保管,在需要第三方证明的场景不具备证明力。