2016-05-16 92 views
0

我最近使用apache POI庫實現了辦公文檔的數字簽名和驗證。我現在正在考慮爲此添加驗證,以便證明文檔由可信用戶簽名。我已經嘗試了下面的代碼,但沒有成功我認爲作爲「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

您必須選擇從鏈根據發行通用名稱= {} myCer.cer通用名稱的證書,然後嘗試驗證它

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

我希望這能幫助