Java PDF签名错误org.bouncycastle.asn1.ASN1UTCTime与org.bouncycastle.asn1.ASN1Set不兼容

Java PDF签名错误org.bouncycastle.asn1.ASN1UTCTime与org.bouncycastle.asn1.ASN1Set不兼容,java,pdf,bouncycastle,openpdf,Java,Pdf,Bouncycastle,Openpdf,我正在尝试在飞行中签署PDF。我显然没有做到这一点。 感谢您的帮助 这只是一个pdf签名测试。为了以后的目的,我将保存这些私钥和公钥 其目的是动态生成签名PDF。 我遵循了本文中显示的代码 以下是代码片段 导入java.io.ByteArrayOutputStream; 导入java.math.biginger; 导入java.security.KeyPair; 导入java.security.KeyPairGenerator; 导入java.security.SecureRandom; 导入

我正在尝试在飞行中签署PDF。我显然没有做到这一点。 感谢您的帮助

这只是一个pdf签名测试。为了以后的目的,我将保存这些私钥和公钥

其目的是动态生成签名PDF。 我遵循了本文中显示的代码

以下是代码片段


导入java.io.ByteArrayOutputStream;
导入java.math.biginger;
导入java.security.KeyPair;
导入java.security.KeyPairGenerator;
导入java.security.SecureRandom;
导入java.security.security;
导入java.security.cert.x509证书;
导入java.util.Date;
导入org.bouncycastle.asn1.x500.X500NameBuilder;
导入org.bouncycastle.asn1.x500.style.BCStyle;
导入org.bouncycastle.cert.X509v3CertificateBuilder;
导入org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
导入org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder;
导入org.bouncycastle.operator.ContentSigner;
导入org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
导入com.lowagie.text.Rectangle;
导入com.lowagie.text.pdf.PdfReader;
导入com.lowagie.text.pdf.pdfsignaturepearance;
导入com.lowagie.text.pdf.PdfStamper;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
公共类签名PDF{
Logger Logger=LoggerFactory.getLogger(SignPdf.class);
私有静态最终字符串BC=org.bouncycastle.jce.provider.BouncyCastleProvider.provider\u NAME;
公共字节[]getSignature(字节[]原始字节,应用程序oap)引发异常{
ByteArrayOutputStream os=新建ByteArrayOutputStream();
KeyPairGenerator generator=KeyPairGenerator.getInstance(“RSA”);
SecureRandom=SecureRandom.getInstance(“SHA1PRNG”);
generator.initialize(1024,随机);
KeyPair KeyPair=generator.generateKeyPair();
X509证书[]链=
{
这是一个.getself证书(
钥匙对,
"", 
"", 
"", 
oap.getDateOfApply(),
oap.getDateOfReturn(),
""
)
};
//读卡器和压模
PdfReader reader=新PdfReader(原始字节);
PdfStamper stamper=PdfStamper.createSignature(读卡器,操作系统,'\0');
PdfSignatureAppearance外观=母版。getSignatureAppearance();
外观。设置原因(“原因”);
外观。设置位置(“”);
外观:setVisibleSignature(新矩形(36748144780),1,“sig”);
setCrypto(keyPair.getPrivate(),chain,null,PdfSignatureAppearance.SELF_-SIGNED);
压模关闭();
返回os.toByteArray();
}
私有X509Certificate getSelfCertificate(
钥匙对钥匙对,
字符串组织,
字符串组织单元,
字符串commonName,
发布日期:,
有效日期,
字符串签名算法
){
试一试{
addProvider(新org.bouncycastle.jce.provider.BouncyCastleProvider());
X500NameBuilder=新的X500NameBuilder(BCStyle.INSTANCE);
builder.addRDN(BCStyle.OU,orgUnit);
建筑商地址(BCStyle.O,组织);
builder.addRDN(BCStyle.CN,commonName);
biginger serial=biginger.valueOf(System.currentTimeMillis());
X509v3CertificateBuilder certGen=新JcaX509v3CertificateBuilder(
builder.build(),
电视连续剧
发布日期:,
有效的,
builder.build(),
keyPair.getPublic()
);
ContentSigner sigGen=新的JcaContentSignerBuilder(signatureAlgorithm)
.setProvider(BC)
.build(keyPair.getPrivate());
X509CertificateCert=新的JcaX509CertificateConverter()
.setProvider(BC)
.getCertificate(
certGen
.build(sigGen)
);
cert.checkValidity(新日期());
cert.verify(cert.getPublicKey());
返回证书;
}捕获(例外e){
logger.error(“{}”,e.getMessage());
e、 printStackTrace();
}
返回null;
}
}
运行此代码时,我无法找出错误

java.lang.ClassCastException: org.bouncycastle.asn1.ASN1UTCTime incompatible with org.bouncycastle.asn1.ASN1Set
        at com.lowagie.text.pdf.PdfPKCS7$X509Name.<init>(PdfPKCS7.java:1724)
        at com.lowagie.text.pdf.PdfPKCS7.getSubjectFields(PdfPKCS7.java:1149)
        at com.lowagie.text.pdf.PdfSignatureAppearance.getAppearance(PdfSignatureAppearance.java:483)
        at com.lowagie.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:1045)
        at com.lowagie.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:963)
        at com.lowagie.text.pdf.PdfStamper.close(PdfStamper.java:219)
        at com.blah.SignPdf.getSignature(SignPdf.java:94) // this is  stamper.close();
java.lang.ClassCastException:org.bouncycastle.asn1.ASN1UTCTime与org.bouncycastle.asn1.ASN1Set不兼容
请访问com.lowagie.text.pdf.PdfPKCS7$X509Name。(PdfPKCS7.java:1724)
位于com.lowagie.text.pdf.PdfPKCS7.getSubjectFields(PdfPKCS7.java:1149)
请访问com.lowagie.text.pdf.PdfSignatureAppearance.getAppearance(PdfSignatureAppearance.java:483)
位于com.lowagie.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:1045)
请访问com.lowagie.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:963)
位于com.lowagie.text.pdf.PdfStamper.close(PdfStamper.java:219)
在com.blah.SignPdf.getSignature(SignPdf.java:94)//这是stamper.close();
maven配置是


com.github.librepdf
openpdf