iText7引用旧的BouncyCastle库

时间:2016-06-17 07:45:48

标签: java bouncycastle itext7

好的,我正在尝试执行针对iText(7)和BouncyCastle(154)jar文件编译的测试Java程序。一切都在游泳,直到我在调用signDetached函数时尝试添加OCSP响应。

我的代码基本上是来自iText网站的这段代码:

http://developers.itextpdf.com/examples/security/digital-signatures-white-paper/digital-signatures-chapter-3#855-c3_07_signwithocsp.java

在必要时更换证书和密码详细信息。这一切都可以编译好但是当我运行它时,Java代码会出现以下错误:

  

线程中的异常" main" java.lang.NoClassDefFoundError:   org.bouncycastle.ocsp.RevokedStatus at   com.itextpdf.signatures.OcspClientBouncyCastle.getEncoded(OcspClientBouncyCastle.java:148)   at com.itextpdf.signatures.PdfSigner.signDetached(PdfSigner.java:510)   在DECSignHello.DoSign(DECSignHello.java:314)at   DECSignHello.main(DECSignHello.java:125)引起:   java.lang.ClassNotFoundException:org.bouncycastle.ocsp.RevokedStatus   在java.net.URLClassLoader.findClass(URLClassLoader.java:600)at   java.lang.ClassLoader.loadClassHelper(ClassLoader.java:777)at   java.lang.ClassLoader.loadClass(ClassLoader.java:750)at   sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:326)at at   java.lang.ClassLoader.loadClass(ClassLoader.java:731)... 4更多

当我深入挖掘时,我发现iText7正在使用一个名为OcspClientBouncyCastle的java类,它引用了一个更古老的BouncyCastle实现的类文件(在151之前的东西 - 没有确切地确定哪个版本它还包含这个类)。它引用的类是org.bouncycastle.ocsp.RevokedStatus。导致问题的代码是:

status instanceof org.bouncycastle.ocsp.RevokedStatus

OcspClientBouncyCastle.java的第148行。它不存在于151及以上的任何BouncyCastle jar文件中......

相同的iText类OcspClientBouncyCastle.java文件似乎也使用路径org.bouncycastle.cert.ocsp.*中找到的更新的BouncyCastle类来处理BouncyCastle相关的所有其他内容,因此看起来好像它使用了两个不同的BouncyCastle实现。至少这对我来说是什么样的。

导致我的OCSP测试失败,因为当我收到来自我的服务提供商的无效OCSP响应时(因为我使用的是已撤销的证书来测试),{I引用的类在类路径中找不到{1}}源代码 - 所以它都会因无法解决的错误而崩溃。

现在,我可以通过使用154 BouncyCastle实现中的有效类进行手动OCSP验证来解决这个问题,如下所示:

BasicOCSPResp l_resp = l_ocsp_client.getBasicOCSPResp(l_other_cert, l_root_cert, l_ocsp_url);
SingleResp[] l_response = l_resp.getResponses();

依旧......

但是,只要我使用iText7 OcspClientBouncyCastle.java函数(传递和PdfSigner.signDetached的实例作为OCSP客户端参数),就会调用OcspClientBouncyCastle代码并且'老'使用了类。

我想我可以通过在我的类路径中包含较旧的(尚未识别的)BouncyCastle jar文件来解决该错误,但这似乎是一个混乱的解决方案。

我还可以编辑OcspClientBouncyCastle.java文件并更正错误的函数以使用更新的BouncyCastle函数实现,但这似乎也有点过分了。

我应该提一下,我在命令行上的AIX环境中工作。所以没有Java开发工具/环境 - 只需OcspClientBouncyCastle.java,我手动构建我的类路径(在编译和运行时)并使用ksh shell脚本执行我的代码。

所以,经过所有这些,我想我的问题是:有人能想出iText以这种方式实现类vi的合理理由吗?

我是这个论坛的长期关注者/用户,但这是我第一次发帖。我意识到我的问题'范围相当广泛,所以要事先道歉。

以下是示例代码:

OcspClientBouncyCastle

0 个答案:

没有答案