- 通过pdfbox加载文件取得签名。
- 通过bouncycastle,取得签名的对象ID,来判断是否是含有时间戳的签名。
代码:
try (PDDocument document = Loader.loadPDF(input)) {
List
if (signatures.isEmpty()) {
} else {
PDSignature signature = signatures.get(signatures.size() - 1);
byte[] content = signature.getContents();
CMSSignedData signedData = new CMSSignedData(content);
String oid = signedData.getSignedContentTypeOID();
if(StringUtils.isNotBlank(oid) && oid.equals(ContentInfo.id_ct_TSTInfo.getId())) {
。。。。。。
参考:时间戳签名协议rfc3161 https://datatracker.ietf.org/doc/html/rfc3161
RFC 3161 Time-Stamp Protocol (TSP) August 2001
id-ct-TSTInfo 对象标识符 ::= { iso(1) member-body(2)
us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 4}
“eContentType” 通常表示扩展内容类型(extended content type)。它用于指定特定数据或消息的类型属性,以便接收方能够正确地解析和处理该数据。
RFC 3161 即 “Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)”,它是互联网工程任务组(IETF)发布的一份标准文档。
一、主要内容
时间戳协议定义
RFC 3161 定义了一个时间戳协议(Time-Stamp Protocol,TSP),该协议允许客户端向时间戳权威机构(Time Stamp Authority,TSA)请求数字时间戳。
数字时间戳是一个包含了特定时间信息和数据完整性验证信息的数据结构,用于证明某个数据在特定时间点的存在性和完整性。