2016-05-16 21 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

あなたはその後、

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

それを検証しようとすると、発行者の共通名= {myCer.cer}共通名に基づいてチェーンから証明書を選択する必要があり、私はこれが