如何测试X509TrustManager子类?

时间:2012-05-22 21:44:32

标签: java ssl junit cryptography x509certificate

我将javax.net.ssl.X509TrustManager子类化,因此我可以使用私有SSL证书。现在我正在尝试为我的类编写一个JUnit测试,但测试用例一直给我一个空指针异常。

例如我的checkClientTrusted()实现是一个空方法。但是,当我使用(假设的)有效X509Certificate[]实例(以及任何类型的String)调用该方法时,JUnit会在该行测试代码中报告NullException。关于我缺少什么的任何建议?

2 个答案:

答案 0 :(得分:7)

为了使用自签名证书而对“X509TrustManager”进行子类化(我假设你的'私有SSL证书'是什么意思?)有点矫枉过正。使用此类证书的更简单方法是:

将密钥库文件(信任库)与证书(或您创建自签名证书的CA证书)一起使用,并将应用程序指向该证书。您所要做的就是确保'SSLContext'了解您的信任库。有关详细信息,请查看(写得非常好)文章Custom SSL for advanced JSSE developers。从技术上讲,这比使用全局JRE信任库更安全,因为只有您的证书才会被接受为有效。

使用“keytool”将证书(或您使用其创建自签名证书的CA的证书)添加到JRE的全局信任库。全局JRE信任库位于'$ JAVA_HOME / lib / security / cacerts'中。 JRE信任库的密码始终是“changeit”。虽然这种方式显然会使部署更加困难,但有时您无法控制JRE安装。

答案 1 :(得分:1)

问题是我从junit.framework.TestCase继承了我的测试类,这导致我的@BeforeClass安装方法不被调用(因此我在那里实例化的变量仍为null)。删除后,现在情况正常。