【问题标题】:When a TrustManagerFactory is not a TrustManagerFactory (Java)当 TrustManagerFactory 不是 TrustManagerFactory (Java)
【发布时间】:2013-02-01 20:41:46
【问题描述】:

我正在尝试向现有的 App-Server (TomCat) 产品添加一些额外的 JUnit 测试。我遇到了(现有和已部署的)自定义 TrustManager 的问题。这东西在生产中运行良好,但在 JUnit 期间,出现异常。

自定义的 TrustManager 仅从路径加载密钥库,并隐式信任我们自己的公共证书。出于某种原因,在 JUnits 中使用 this 会导致以下行出现异常:

TrustManagerFactory tmFactory = TrustManagerFactory.getInstance("PKIX");    

例外:

java.security.NoSuchAlgorithmException:  class configured for TrustManagerFactory: com.sun.net.ssl.internal.ssl.TrustManagerFactoryImpl$PKIXFactory not a TrustManagerFactory

无论使用何种 Provider/Algorithm 组合(“SunX509”、.getDefaultAlgorithm() 等),都会发生此异常。

任何见解将不胜感激。

【问题讨论】:

  • AFAICT,Idea 正在使用 %JAVA_HOME%,解析为:java version "1.6.0_23"Java(TM) SE Runtime Environment (build 1.6.0_23-b05)Java HotSpot(TM) 64-Bit Server VM (build 19.0-b09, mixed mode)
  • 看起来 JUnit 以某种方式弄乱了安全提供程序配置。
  • 如果你的意思是提供者,他们看起来不错(我可以仔细阅读它们并在 BC 和 SunX509 等下找到 PKIX)。 . . .这很奇怪。
  • 您是否有机会将 1.3 天的旧 JSSE jar 文件安装在 JUnit 可以看到但生产不能看到的 CLASSPATH 的某个位置?如果是这样,请将其删除。
  • 据我所知没有。奇怪的是:我将 SSL init 函数移到另一个类中,而 TrustManager 的问题就消失了。不知道为什么。 >_

标签: java security ssl junit pkix


【解决方案1】:

好吧,看起来 PowerMock 搞砸了 SSL 问题,因此,您加载了错误的工厂。解决方案是在测试类上使用注释:

@PowerMockIgnore("javax.net.ssl.*")

这取自https://groups.google.com/forum/#!topic/powermock/v4nreP2AnOQ

【讨论】:

  • 完美 :) 谢谢!
猜你喜欢
  • 2019-07-01
  • 1970-01-01
  • 2012-08-24
  • 2017-04-06
  • 2012-04-13
  • 2014-06-02
  • 2022-01-13
  • 2015-12-07
  • 2020-03-04
相关资源
最近更新 更多