« JavaでWebDAVクライアントを実装してみる | Main | JackrabbitでWebDAVでファイルを保存する »

2010.10.05

JackrabbitでSSL通信

Jackrabbitでとりあえずファイル一覧を取得することができたので、経路をSSLで保護することに。

例によって例のごとく、「オレオレ証明書」を使用しているので、そのままでは通信エラーになってしまいます。内部的に、Commons HttpClientを使用しているので、その資料が参考になるのではないかと・・・。

JavaのSSL通信でオレオレ証明書を使う方法は2つあって、1つはKeyStoreを使用する方法で、もう1つは「証明書のエラーを無視する」という方法。普段は後者を使用しているので、今回も後者を使用してみることに。

もっとも、独自(自作)のHttpクライアントでのSSL通信は行ったことがある(X509TrustManagerも含め)のですが、Commons HttpClientでのSSL通信は初めてだったので、いろんなものを参考にしながら。
で、参考にしたのは、HttpClientのSSL通信。ほとんどコピペの状態でクラスを作成し、いざ通信! を行ってみたのですが、エラー・・・。

DAVでのアクセスではなく、通常のGetMethodを使用してのアクセスの場合、問題なく結果を取得できているので、クラスの作り方自体は間違っていないはず。デバッガーで追ってみると、GetMethodの場合は、自作のSocketFactoryがきちんと呼び出されているのですが、PropFindMethodの場合、自作のSocketFactoryが呼び出されていないようです。そりゃ、エラーになってしまいます・・・。

仕方がないので、KeyStoreを使用する方法を採用することに。参考資料はこちら・・・って、過去の実験結果そのまんまですが(^^;
まずは、サーバーの証明書を取得。例えば、InternetExplorerでアクセスした場合、「詳細」→「ファイルにコピー」→「DER encoded bynary X509」形式でファイルを保存しておきます。
JDKに付属しているkeytool.exeを用いて、keystoreを作成します(新規ファイル作成時は、keystoreのパスワードも合わせて指定することとなります)。

keytool.exe -keystore c:\tmp\cer\.keystore -import -alias hogesvrca -file hogesvrca.cer

実際にこのkeystoreを使用する場合は、起動時に-Dでパラメータを与えるか、あるいは、通信関係の処理を行う前に、System.setPropertyで指定しておきます。

System.setProperty("javax.net.ssl.trustStore", "C:\\tmp\\cer\\.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "password");

とりあえず、keystoreを使用することで、Jackrabbitでも(オレオレ証明書で)SSL通信を行うことができました。

次は、元々の目的である、ファイルの保存(PUT)を行ってみることに。

|

« JavaでWebDAVクライアントを実装してみる | Main | JackrabbitでWebDAVでファイルを保存する »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/49618292

Listed below are links to weblogs that reference JackrabbitでSSL通信:

« JavaでWebDAVクライアントを実装してみる | Main | JackrabbitでWebDAVでファイルを保存する »