2016-05-16 4 views
0

Недавно я реализовал цифровую подпись и проверку офисных документов с использованием библиотеки POI apache. Теперь я хочу добавить подтверждение, чтобы подтвердить, что документ был подписан доверенным пользователем. Я пробовал следующий код, но без успеха я думаю, что вызов getSigningCertificateChain пуст, но я не уверен, как правильно загрузить его, чтобы подпись была там? это мой текущий код:Проверка POI Цифровая подпись

pkg = OPCPackage.open(Dir, PackageAccess.READ); 

    sic = new SignatureConfig(); 
    sic.setOpcPackage(pkg); 
    SignatureInfo si = new SignatureInfo(); 
    si.setSignatureConfig(sic); 
    isValid = si.verifySignature(); 

    X509Certificate x509a = (X509Certificate) sic.getSigningCertificateChain().get(0); 


    FileInputStream fin = new FileInputStream("C:\myCer.cer"); 
    CertificateFactory f = CertificateFactory.getInstance("X.509"); 
    X509Certificate certificate = (X509Certificate)f.generateCertificate(fin); 
    PublicKey pk = certificate.getPublicKey(); 
    x509a.verify(pk); 

Кому-то повезло с реализацией этого.

+0

ли вам попробуйте прочитать [блок Apache POI для тестирования подписи документов] (http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java?view = разметка)? Раздел [шифрование на веб-сайте] (http://poi.apache.org/encryption.html) охватывает основы, но модульные тесты, вероятно, являются лучшими для полной информации – Gagravarr

ответ

0

Вы должны выбрать сертификат из цепочки на основе эмитента Common Name = {} myCer.cer Common Name, а затем попытаться проверить его

PublicKey pk = selectedIssuedCertificate.getPublicKey(); 
x509a.verify(pk); 

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