我进行了子类化javax.net.ssl.X509TrustManager
,以便可以使用私有 SSL 证书。现在我正在尝试为我的类编写一个 JUnit 测试,但是测试用例不断给我一个空指针异常。
例如,我的实现checkClientTrusted()
是一个空方法。X509Certificate[]
但是,当我使用(假定的)有效实例(以及任何类型的 String )调用该方法时,JUnitNullException
会在该行测试代码中报告 a。关于我缺少什么的任何建议?
我进行了子类化javax.net.ssl.X509TrustManager
,以便可以使用私有 SSL 证书。现在我正在尝试为我的类编写一个 JUnit 测试,但是测试用例不断给我一个空指针异常。
例如,我的实现checkClientTrusted()
是一个空方法。X509Certificate[]
但是,当我使用(假定的)有效实例(以及任何类型的 String )调用该方法时,JUnitNullException
会在该行测试代码中报告 a。关于我缺少什么的任何建议?
子类化“X509TrustManager”只是为了使用自签名证书(我认为这就是你对“私有 SSL 证书”的意思?)有点矫枉过正。使用此类证书的更简单方法是:
使用带有证书(或您创建自签名证书的 CA 的证书)的密钥库文件(信任库)并将您的应用程序指向该证书。您所要做的就是确保“SSLContext”知道您的信任库。有关详细信息,请查看(写得非常好)文章 为高级 JSSE 开发人员定制 SSL。从技术上讲,这比使用全局 JRE 信任库更安全,因为只有您的证书才会被接受为有效。
使用“keytool”将证书(或用于创建自签名证书的 CA 的证书)添加到 JRE 的全局信任库。全局 JRE 信任库位于“$JAVA_HOME/lib/security/cacerts”中。JRE 信任库的密码始终为“changeit”。尽管这种方式显然会使部署变得更加困难,因为有时您无法控制 JRE 安装。
问题是我将我的测试类从 子类化junit.framework.TestCase
,这导致我的@BeforeClass
设置方法没有被调用(因此我在那里实例化的变量仍然为空)。删除后,现在一切正常。