【发布时间】: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