1

javax.net.ssl.X509TrustManagerプライベート SSL 証明書を使用できるようにサブクラス化しました。現在、クラスの JUnit テストを作成しようとしていますが、テスト ケースで null ポインター例外が発生し続けます。

たとえば、私の実装checkClientTrusted()は空のメソッドです。ただし、(おそらく)有効なインスタンスX509Certificate[](およびそのことについてはあらゆる種類の文字列)でそのメソッドを呼び出すと、JUnitNullExceptionはテストコードのその行で a を報告します。私が欠けているものに関する提案はありますか?

4

2 に答える 2

7

自己署名証明書を使用するためだけに 'X509TrustManager' をサブクラス化する ('private SSL cert' とはそういう意味だと思いますか?) のは少しやり過ぎです。このような証明書を使用するより簡単な方法は次のとおりです。

証明書 (または自己署名証明書の作成に使用した CA の証明書) でキーストア ファイル (トラストストア) を使用し、アプリケーションがそれを参照するようにします。「SSLContext」がトラストストアを認識していることを確認するだけです。詳細については、高度な JSSE 開発者向けの (非常によく書かれた) 記事 Custom SSL を参照してください。技術的には、証明書のみが有効として受け入れられるため、グローバル JRE トラストストアを使用するよりも安全です。

「keytool」を使用して、証明書 (または自己署名証明書を作成した CA の証明書) を JRE のグローバル トラストストアに追加します。グローバル JRE トラストストアは「$JAVA_HOME/lib/security/cacerts」にあります。JRE トラストストアのパスワードは常に「changeit」です。JREのインストールを制御できない場合があるため、この方法では明らかに展開が難しくなります。

于 2012-05-22T22:06:06.667 に答える
1

問題は、テスト クラスを からサブクラス化junit.framework.TestCaseしたために、@BeforeClasssetup メソッドが呼び出されなかったことです (したがって、そこでインスタンス化した変数はまだ null のままでした)。それを削除した後、物事は現在機能しています。

于 2012-05-23T13:11:14.670 に答える