itext解析pdf中签章文件的证书

itext可以生成pdf并对其进行各种操作,其中就包括签章,并且用其他工具签的章,itext也可以识别出来。

目前系统中有一个需求,系统要求上传的pdf必须进行签章,上传后需要对pdf进行验签和拿到pdf章的证书的所有者,

拿到章证书的所有者代码如下

	PdfReader reader = new PdfReader(pdfPath);
AcroFields acroFields = reader.getAcroFields();
if (acroFields == null) {
return result;
}
//签章名称
List<String> signatureNames = acroFields.getSignatureNames();
if (signatureNames == null || signatureNames.size() == 0) {
return result;
}
reader.close();
for (String str : signatureNames) {
//签章对应的字典
PdfDictionary sigDict = acroFields.getSignatureDictionary(str);
if (sigDict == null) {
continue;
}
PdfName sub = sigDict.getAsName(PdfName.SUBFILTER);
if (PdfName.ADBE_X509_RSA_SHA1.equals(sub)) {
//签章对应的证书
PdfString certStr = sigDict.getAsString(PdfName.CERT);
if (certStr == null) {
certStr = sigDict.getAsArray(PdfName.CERT).getAsString(0);
}
if (certStr == null) {
continue;
}
//签章对应的证书
X509CertParser certParser = new X509CertParser();
certParser.engineInit(new ByteArrayInputStream(certStr.getBytes()));
Collection<Certificate> certs = certParser.engineReadAll();
if (certs == null || certs.size() == 0) {
continue;
}
X509Certificate certificate = (X509Certificate) certs.iterator().next();
if (certificate == null) {
continue;
}
X500Principal principal = certificate.getSubjectX500Principal();
if (principal == null) {
continue;
}
//签章对应的证书的所有者
LdapName ldapDN = new LdapName(principal.getName());
for (Rdn rdn : ldapDN.getRdns()) {
if ("CN".equals(rdn.getType())) {
result.add((String) rdn.getValue());
}
}
}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值