[英]How do I retrieve the digital signature data from a Word file using Java?
我有一个已经过数字签名的word / docx文件。
我需要打开文件并阅读签名主题,有效期自,有效期至以及其他详细信息(包括RSA公钥)
如何从Java做到这一点?
以下链接对我没有帮助,因为我已经有签名的文档。
我尝试用Apache Poi,但未成功,仅返回null
public static void main(String[] args) throws IOException, XmlException {
String fileName = "test.docx";
OPCPackage pkg = null;
try {
pkg = OPCPackage.open(fileName, PackageAccess.READ_WRITE);
} catch (InvalidFormatException ex) {
ex.printStackTrace();
}
SignatureConfig sic = new SignatureConfig();
sic.getProxyUrl();
sic.setOpcPackage(pkg);
SignatureInfo si = new SignatureInfo();
si.setSignatureConfig(sic);
boolean isValid = si.verifySignature();
System.out.println("isValid " + isValid);
Iterator<SignaturePart> iter = si.getSignatureParts().iterator();
while (iter.hasNext()) {
SignaturePart element = iter.next();
System.out.println("getSigner " + element.getSigner());
List<X509Certificate> list = element.getCertChain();
for (X509Certificate cc : list) {
System.out.println("getSigAlgName " + cc.getSigAlgName());
System.out.println("getSigAlgOID " + cc.getSigAlgOID());
System.out.println("getNotAfter " + cc.getNotAfter());
System.out.println("getNotBefore " + cc.getNotBefore());
}
}
但是检查isValid,返回true。
... 接着
boolean isValid = si.verifySignature();
List<X509Certificate> result = new ArrayList<X509Certificate>();
for (SignaturePart sp : si.getSignatureParts()) {
if (sp.validate()) {
result.add(sp.getSigner());
}
}
pkg.revert();
pkg.close();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.