Как программно подписать XML-документ MS Office с помощью Java?

Пожалуйста, кто-то может указать мне правильное направление для цифровой подписи документа MS-Office (docx, xlsx, pptx) в Apache POI или любой другой библиотеке с открытым исходным кодом?

Я уже просмотрел классы в org.apache.poi.openxml4j.opc.signature, но не могу понять, как я могу добавить подпись в документ.

1 ответ

Проверьте этот пример кода. В этом примере кода используется файл хранилища ключей PFX (PKCS12) . Подписывает документ и проверяет его.

 // loading the keystore - pkcs12 is used here, but of course jks & co are also valid
 // the keystore needs to contain a private key and it's certificate having a
 // 'digitalSignature' key usage
 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();
 // optionally verify the generated signature
 boolean b = si.verifySignature();
 assert (b);
 // write the changes back to disc
 pkg.close();

Вот пример источника: https://poi.apache.org/apidocs/org/apache/poi/poifs/crypt/dsig/SignatureInfo.html

Я надеюсь, что это может помочь!

Другие вопросы по тегам