猿问

Apache POI 是否支持对单词进行两次签名?

我试图运行签名代码两次,但我发现它只是一般的 sig1.xml ,而不是 sig1.xml 和 sig2.xml 。


char password[] = "test".toCharArray();

File file = new File("test.pfx");

KeyStore keystore = KeyStore.getInstance("PKCS12");

FileInputStream fis = new FileInputStream(file);

keystore.load(fis, password);

fis.close();


// extracting private key and certificate

String alias = "xyz"; // alias of the keystore entry

Key key = keystore.getKey(alias, password);

X509Certificate x509 = (X509Certificate)keystore.getCertificate(alias);


// filling the SignatureConfig entries (minimum fields, more options are available ...)

SignatureConfig signatureConfig = new SignatureConfig();

signatureConfig.setKey(keyPair.getPrivate());

signatureConfig.setSigningCertificateChain(Collections.singletonList(x509));

OPCPackage pkg = OPCPackage.open(..., PackageAccess.READ_WRITE);

signatureConfig.setOpcPackage(pkg);


// adding the signature document to the package

SignatureInfo si = new SignatureInfo();

si.setSignatureConfig(signatureConfig);

si.confirmSignature();


慕桂英3389331
浏览 303回答 2
2回答

慕码人2483693

我已经通过#63011修复了原始问题,它将在 POI 4.1.0 中发布。票的相关部分是。有一个新的配置属性SignatureConfig.setAllowMultipleSignatures(true)允许添加签名,默认情况下为 false 以保持向后兼容。

白衣非少年

在 org.apache.poi.poifs.crypt.dsig.SignatureInfo 中,有一个方法 writeDocument(Document document) 创建覆盖前一个(如果有)的 sig1.xml,这就是为什么如果你多次签署它,你只会看到最后一个签名,尽管在 docx/xlsx 的 _xmlsignatures/_rels/origin.sigs.rels 中,您可以看到与每个签名的关系。如果你更换:&nbsp;sigPartName = PackagingURIHelper.createPartName("/_xmlsignatures/sig1.xml");像这样:SignatureInfo si = new SignatureInfo();si.setSignatureConfig(signatureConfig);Iterator<?> iterator = si.getSignatureParts().iterator();int i = 1;while (iterator.hasNext()) {&nbsp; &nbsp;iterator.next();&nbsp; &nbsp;i++;&nbsp;}sigPartName = PackagingURIHelper.createPartName("/_xmlsignatures/sig" + i + ".xml");它将创建 sig1.xml, sig2.xml, ... 当打开 docx/xlsx 时,所有签名都会在那里。
随时随地看视频慕课网APP

相关分类

Java
我要回答