我正试图用BouncyCastle CMS签署一份PDF文件。签名有效,但Adobe Reader告诉我它还没有准备好LTV。
据我所知,CRL嵌入在CMS SignedData中。证书也被嵌入其中。还嵌入了时间戳。
签名是一个分离的签名,放在“预留空间”。
为什么签名还没有准备好?我是不是做错了什么?
签名测试-PDF:http://www.filedropper.com/outputx
代码:
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
// CertificateChain
List<Certificate> certList = Arrays.asList(certChain);
try {
Hashtable signedAttrs = new Hashtable();
X509Certificate signingCert = (X509Certificate) certList.get(0);
gen.addSignerInfoGenerator(new JcaSimpleSignerInfoGeneratorBuilder().setProvider("BC")
.setSignedAttributeGenerator(new AttributeTable(signedAttrs))
.build("SHA256withRSA", privKey, signingCert));
gen.addCertificates(new JcaCertStore(certList));
boolean embedCrls = true;
if (embedCrls) {
X509CRL[] crls = fetchCRLs(signingCert);
for (X509CRL crl : crls) {
gen.addCRL(new JcaX509CRLHolder(crl));
}
}
// gen.addOtherRevocationInfo(arg0, arg1);
CMSProcessableByteArray processable = new CMSProcessableByteArray(IOUtils.toByteArray(content));
CMSSignedData signedData = gen.generate(processable, false);
if (tsaClient != null) {
signedData = signTimeStamps(signedData);
}
return signedData.getEncoded();
} catch (Exception e) {
throw new RuntimeException(e);
}
在可互操作的PDF签名中,有两种方法可以添加与验证相关的信息,它们都没有使用默认的CMS方法来添加代码使用的CRL。
旧的ISO 32000-1样式的ISO 32000中使用的PKCS#7签名(后来基于CMS而不是PKCS#7)被指定为在Adobe注册的OID的专用签名属性中包含撤销信息:
adbe吊销信息属性:
adbe-revocationInfoArchival OBJECT IDENTIFIER ::=
{ adbe(1.2.840.113583) acrobat(1) security(1) 8 }
吊销信息属性的值可以包括以下任何数据类型:
adbe的吊销信息属性值具有ASN。1类撤销:
RevocationInfoArchival ::= SEQUENCE {
crl [0] EXPLICIT SEQUENCE of CRLs, OPTIONAL
ocsp [1] EXPLICIT SEQUENCE of OCSP Responses, OPTIONAL
otherRevInfo [2] EXPLICIT SEQUENCE of OtherRevInfo, OPTIONAL
}
OtherRevInfo ::= SEQUENCE {
Type OBJECT IDENTIFIER
Value OCTET STRING
}
(显然这只是伪ASN.1…)
由于此结构是已签名属性的值,因此必须在签名之前获取吊销信息,才能像这样添加。
对于他们的PAdES签名,ETSI指定了额外的PDF结构,添加到可携带额外验证相关信息的已签名PDF文档中,请参阅ETSI EN 319 142。这些结构后来被整合到ISO 32000-2中:
文件安全存储(DSS)应为字典,该字典应为文件目录字典中DSS密钥的值(见7.7.2,“文件目录字典”)。本词典可能包含:
任何VRI字典(如有)应位于文件增量更新部分。如果VRI字典适用的签名字典本身处于增量更新部分,则DSS/VRI更新应在签名更新之后进行。包含VRI字典条目是可选的。VRI条目中引用的所有验证材料也包含在DSS条目中。
...
正如您在这里已经读到的,这种结构是为在签名后添加信息而设计的。这与ETSI一起支持在签名后生成的用于验证的撤销信息。
你在标签中提到了PDFBox,所以你似乎使用PDFBox进行签名。
要将预取的验证数据添加到已签名的adbe revocationfoarchive
属性中,只需将上述定义的属性添加到代码的signedAttrs
。
要在文档安全存储(DSS)中添加数据,您可以使用@Tilman在评论中提到的PDFBox示例addValidationInformation
的代码。
null 无论我用电子邮件发送apks还是用USB安装apks,问题仍然存在。
结果是,我尝试为ElasticSearch和Kibana添加用户。对于ElasticSearch,我添加了。yml和和。yml。 当我启动ElasticSearch时,系统会提示我输入用户名和密码。我这样做并成功登录。 但是当我开始Kibana,在日志中我得到这个错误: 在http://localhost:5601,我得到了这个错误 为了排除故障,我跑步http://localhost:9200/
我有下面的代码,我想在它上面关闭preparedStatement对象,因为它是作为一个来自sonar的bug提出的。 如何关闭preparedStatement对象?我看到的大多数示例大多使用try/finally或try with resources,然后创建对象并使用它try and close in finally。然而,在这里,对象是在单独的函数中创建的,它从那里返回,然后被使用。所以创
我以编程方式签名PDF。每个新签名都是以增量方式添加的,我在%EOF之后添加签名字典,并像这样更新AcroForm(对不起,我在工作,所以我不能上传PDF): 也许问题是我有多个具有相同ID的对象,而我的最后一个AcroForm只引用了最后一个签名?我想能够签署一个文件多次,但我有一个问题。第一次签名没有问题,并显示以下横幅: 然后我尝试用另一个证书再次对同一个文件进行签名,这给了我签名旁边的垃圾
问题是,当请求者请求时,数据可能还没有准备好,所以请求的未来可能会失败。我需要给发送者发送一些东西来保证有数据,但显然Akka似乎没有promiseAkaik。 这里如何落实?
问题内容: 通过JDBC对pgbouncer执行批处理查询时,出现以下错误: 我在网上发现了错误报告,但它们似乎都适用于Postgres 8.3或更低版本,而我们正在使用Postgres 9。 这是触发错误的代码: 有人看过吗? 编辑1: 事实证明,这是使用 会话池 以外的任何方法时都会发生的pgBouncer问题。我们正在使用 事务池 ,它显然不支持准备好的语句。通过切换到 会话池 ,我们解决了