我将javax.net.ssl.X509TrustManager
子类化,因此我可以使用私有SSL证书。现在我正在尝试为我的类编写一个JUnit测试,但测试用例一直给我一个空指针异常。
例如我的checkClientTrusted()
实现是一个空方法。但是,当我使用(假设的)有效X509Certificate[]
实例(以及任何类型的String)调用该方法时,JUnit会在该行测试代码中报告NullException
。关于我缺少什么的任何建议?
答案 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)。删除后,现在情况正常。