#java #ms-word #apache-poi #ms-office #digital-signature
#java #ms-word #apache-poi #ms-office #цифровая подпись
Вопрос:
Я использую Apache POI и свой сертификат для цифровой подписи документа .docx:
@Override
public byte[] sign(byte[] content, List<X509Certificate> certChain, PrivateKey privateKey) throws Exception {
OPCPackage pkg = OPCPackage.open(new ByteArrayInputStream(content));
SignatureConfig signatureConfig = new SignatureConfig();
signatureConfig.setKey(privateKey);
signatureConfig.setSigningCertificateChain(certChain);
signatureConfig.setOpcPackage(pkg);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
SignatureInfo si = new SignatureInfo();
si.setSignatureConfig(signatureConfig);
si.confirmSignature();
pkg.save(outputStream);
IOUtils.closeQuietly(pkg);
return outputStream.toByteArray();
}
Цепочка сертификатов содержит мой сертификат и самозаверяющий сертификат (корневой центр сертификации), который используется для подписи моего сертификата (корневой центр сертификации является эмитентом моего сертификата). Этот код выполняется отлично и получает подписанный файл .docx. Но когда я открываю его с помощью Microsoft Word 2016, я получаю это сообщение:
Я также подписываю содержимое PDF с помощью Apache PDFBox, и когда я открываю подписанный PDF-файл с помощью Acrobat Reader, я получаю аналогичную проблему, но ее легко решить, добавив корневой ЦС в список доверенных сертификатов внутри Acrobat Reader. Но в Microsoft Office я не вижу ни одного подобного варианта. Как я могу заставить MS Office доверять корневому центру сертификации (или, по крайней мере, доверять моему сертификату)?
Комментарии:
1. Скорее всего, вам нужно добавить его в саму Windows.
2. К сожалению, я добавил корневой центр сертификации в хранилище доверия Windows, но никакой помощи. Но Acrobat Reader работает
Ответ №1:
После установки сертификата экспортируйте его в виде файла PFX. При экспорте есть возможность подключить корневой центр сертификации. Затем используйте файл PFX для подписи.
Отказ от ответственности: я не пробовал это с самозаверяющим корневым ЦС, поэтому я не знаю, примет ли это Office.
Комментарии:
1. Что вы подразумеваете под «после установки сертификата»? На что и как мне установить?
2. Шаги по установке зависят от того, какой тип сертификата вы создаете. Я больше всего знаком с сертификатами подписи кода, которые устанавливаются с помощью утилиты от Microsoft под названием pvkimprt.exe .