Java密码提供程序 - 奇怪的堆栈跟踪

时间:2012-08-22 17:43:55

标签: java cryptography stack-trace jvm-hotspot nosuchproviderexception

在对某些加密代码进行疑难解答时,我看到了一个奇怪的堆栈跟踪层次结构。我已经解决了orignal问题,但对如何生成这样的堆栈跟踪感到好奇。谁能开导我?

请注意,我无法逐字复制粘贴堆栈跟踪。我必须忽略可能暴露专有代码的帧。

businesscode.BusinessException: Failed while generating session key
        at businesscode.businessthing.BusinessMethod(BusinessApp.java:NN)
        ... NN more
Caused by: java.security.NoSuchProviderException: JCE cannot authenticate the provider XXX
        at javax.crypto.SunJCE_b.a(DashoA13*..)
        at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
        at businesslib.generateKey(BusinessLib.java:NN)
        ... NN more
Caused by: javax.util.jar.JarException: Cannot parse X.jar
        at javax.crypto.SunJCE_c.a(DashoA13*..)
        at javax.crypto.SunJCE_b.b(DashoA13*..)
        at javax.crypto.SunJCE_b.a(DashoA13*..)
        ... 25 more

为什么方法名称如a和b(SunJCE_c.a,SunJCE_b.b)文件/行信息为DashoA13 *

Oracle Java 6 32位,在64位Linux和32位Windows上运行。

这可能是因为某些信息不可用,可能是由于运行时优化?还是一些故意混淆? JNI?

造成这种情况的问题是第三方加密提供程序在jar文件中打包错误。

编辑:原始问题(NoSuchProviderException: JCE cannot authenticate the provider...)是由一个天真的构建过程引起的,该过程从其原始jar中提取加密提供程序类并在一个新的原始jar中重新打包它们 - 但没有所需的签名信息。 感谢Siva和owlstead提醒我签名的罐子:))

3 个答案:

答案 0 :(得分:1)

这里有一些选项(我假设在此签名确认之前):

  1. 用于生成签名的证书/私钥现已过期;
  2. 签名与较新版本的Oracle Java运行时不兼容;
  3. 删除了.jar内容的签名或更改了内容/签名。
  4. 至于奇怪的名字;这些名称是使用代码混淆器进行模糊处理的类的名称。它们不是公共API的一部分,因此您没有理由知道其内容。它们包含验证签名的代码,因此与安全相关。

答案 1 :(得分:0)

您的第三方cryto提供商应该签署所有jar文件,尤其是提供者jar。 SUN(现在是oracle)应该信任该签名。

答案 2 :(得分:0)

它不是椭圆调用签名(变量参数号)吗?