« BatchModifyPlugin(2) | Main | PERMISSIONの付与 »

2008.09.13

SSLクライアント証明書が必要なサイトへのXML-RPC

Tracに対してXML RPCで接続すると結構いろいろなことができるようになります。で、接続先をSSLクライアント証明書で保護しているような場合の接続方法に関するメモ(使用するのはApache XML-RPC)。

まずは普通にXmlRpcClientを初期化。

XmlRpcClient client = new XmlRpcClient();
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setBasicUserName("username");
config.setBasicPassword("password");
config.setServerURL(new URL("https://hostname/trac/test/login/xmlrpc"));
client.setConfig(config);

自己署名証明書などで、証明書エラーが出る場合への対策(もちろん、きちんとした証明書を使用している場合は不要)。

// SSLのサーバ証明書の有効性を無視するための設定
// (全てのサーバ証明書を信頼する)
TrustManager[] trustAllCerts = new TrustManager[] {
 new X509TrustManager() {
  public X509Certificate[] getAcceptedIssuers() {
   return null;
  }
  public void checkClientTrusted(X509Certificate[] certs, String authType) { }
  public void checkServerTrusted(X509Certificate[] certs, String authType) { }
 }
};

SSLContext sc = SSLContext.getInstance("SSL");
// ホスト名を無視する。
HostnameVerifier hv = new HostnameVerifier() {
 public boolean verify(String arg0, SSLSession arg1) {
  return false;
 }
};

クライアント証明書をセット。

// クライアント証明書(p12)をインポートする
// なお、起動時に-Dで証明書ファイルおよび、そのパスワードを指定する。
KeyStore key_store = KeyStore.getInstance("PKCS12");
char[] key_pass = System.getProperty("javax.net.ssl.keyStorePassword").toCharArray();
key_store.load(new FileInputStream(
 System.getProperty("javax.net.ssl.keyStore")), key_pass);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(key_store, key_pass);

sc.init(kmf.getKeyManagers(), trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(hv);

とりあえずこんな感じでサクッとアクセス可能。

 起動時に、java.exeの引数として

-Djavax.net.ssl.keyStorePassword=(証明書のパスワード)
-Djavax.net.ssl.keyStore=(p12ファイルのパス)

を指定して実行します。

 SSLの設定を行うところでは XmlRpcClient オブジェクトに対する操作は一切入っていないことからもわかるように、XML-RPCのクライアントに対して設定するというのではなく、そのクライアントが使用しているHttpsURLConnectionに対して設定すればオッケーってことですね(XML-RPCに関係なく、普通にSSLクライアント証明書で保護されているところにアクセスするhttpクライアントの書き方と同じ)。

|

« BatchModifyPlugin(2) | Main | PERMISSIONの付与 »

Subversion・Trac・etc.」カテゴリの記事

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/42461441

Listed below are links to weblogs that reference SSLクライアント証明書が必要なサイトへのXML-RPC:

« BatchModifyPlugin(2) | Main | PERMISSIONの付与 »