我们试图将时间戳签名作为CMS格式的未签名属性嵌入,但是在PDF格式的签名后,PDF查看器给出的签名包含一个嵌入的时间戳,但它是无效的消息。


我们使用了内部TSA服务(自标识)、TSA和来进行加密和签名操作。但不知道时间戳是怎么回事。有人知道我在做什么吗。
signed.pdf还添加了Java代码库和签名的pdf示例以供参考。
任何帮助都将不胜感激。
发布于 2020-07-26 15:23:06
TSTInfo结构中有一个问题,它的tsa成员是
C = IN,S = MH,L = NSDL,O = NSDL,OU = NSDL,CN = NSDL,E = nsdl@nsdl.co.in但是你的TSA证书有一个相反的主题
E = nsdl@nsdl.co.in,CN = NSDL,OU = NSDL,O = NSDL,L = NSDL,S = MH,C = IN根据RFC 3161,TSA字段的目的是提示识别tsa的名称。如果存在,则必须将对应于要用于验证令牌的证书中包含的主题名称之一。
因此,注意力验证器不能使用您提供的验证时间戳的证书。
我不知道这是不是唯一的问题,但这肯定是一个节目的停播者。
发布于 2020-07-24 21:38:07
这意味着Acrobat无法找到用于创建时间戳的证书。查看ASN.1解码您的PDF签名CMS,您似乎还没有在请求中请求时间戳管理局的证书(搜索timeStampToken以将您带到CMS的适当部分)。在SetCertReq城堡中,通过在TimeStampRequestGenerator实例上调用TimeStampRequestGenerator(True)来实现这一点,如下所示:
TimeStampRequestGenerator reqGenerator = new TimeStampRequestGenerator();
// Request the server to also include the signing certificate:
reqGenerator.SetCertReq(true);当设置这一设置时,时间戳管理局将包括证书,或者更多的是时间戳证书及其链,如实际时间戳的SignedCms中的签名属性。
要确认证书包含在响应中,可以将时间戳权威对文本文件的响应写入十六进制字符串,并使用该网站https://lapo.it/asn1js/对其进行解码。
发布于 2020-07-28 07:03:16
根据TSA 3161,字段的目的是给出识别TSA名称的提示。如果存在,则必须与用于验证令牌的证书中包含的主题名称之一相对应。但是,签名响应的实体的实际标识将始终通过使用SigningCertificate属性中的证书标识符(SigningCertificate属性)来实现,该属性是signerInfo的一部分(参见ESS第5节)。
对于这个问题,TSA需要以以下方式构造tsa GeneralName属性。在下面对源进行了更改。用TSA证书tsa构造SubjectDN
不工作
GeneralName gn = new GeneralName(GeneralName.directoryName, new X500Name(cacert.getSubjectX500Principal().getName()));
工作代码
X500Name iss = X500Name.getInstance(cacert.getSubjectX500Principal().getEncoded()); GeneralName gn = new GeneralName(GeneralName.directoryName, iss); tkg.setTSA(gn);
https://stackoverflow.com/questions/63053527
复制相似问题