JavaでCSRを扱う
Javaの標準クラスライブラリにCSRを扱うものが見当たらないので,ざっくり作成してみた.
OpenSSLコマンド呼び出しによって,PEM形式のCSRを読み込んで,verifyして,DNを取得するものを作成してみた.
verify,DN取得のためにOpenSSLコマンド呼び出しを行う.
より具体的には,verifyのために,
openssl req -verifyを実行する. そしてDN取得のために
openssl req -noout -textを実行する.
今回は,インタフェースCSRとその実装クラスCSROpenSSLCallImplを作成した.
インタフェースCSRには以下のメソッドがある.
public boolean verify(); public Principal getSubjectDN();前者がCSRが妥当かどうかの確認,後者がCSRからDNを抽出する. 実装クラスCSROpenSSLCallImplには以下の二つのコンストラクタがある.
public CSROpenSSLCallImpl (InputStream csrIs) public CSROpenSSLCallImpl (String csrString)いずれもPEM形式CSRのデータである. より具体的的な例を示す. まずCSRファイルを使用する方法.
FileInputStream is = new FileInputStream(testCSRFile);
CSR csr = new CSROpenSSLCallImpl(is);
Principal dn = null;
if (csr.verify()) {
dn = csr.getSubjectDN();
}
そしてCSR文字列を使用する方法.
CSR csr = new CSROpenSSLCallImpl(CSR_STRING);
Principal dn = null;
if (csr.verify()) {
dn = csr.getSubjectDN();
}
opensslコマンドは,デフォルトでは
/usr/bin/opensslである. 別の場所にある場合は,
public static void setOpenSSLCommandPath(String param)を使用して設定する. CSROpenSSLCallImplのコンストラクタ内で即座にOpenSSLコマンド呼び出しを行うので,コマンド設定はコンストラクタを呼び出す前に行う. また,設定したコマンドが実行可能かどうかをチェックするためのメソッド,
public static boolean enabled() public static boolean openSSLCommandEnabled()がある. 両者の処理内容は,Version0.01では同じである.
作成したものをGPLのもとで配布する.
これ.
展開すると,fireproject.security.jarが出て来る.
これをCLASSPATHにいれると使用可能となる.
ソースとビルド環境も同梱されているので,修正作業なども行える.
JavaDoc作成方法は以下.
ant javadocこれでdoc/javadoc/にJavaDocが生成される. テスト実行にはまず,以下でライブラリを準備する.
$ ant preparelibこれでネットからjunitとtdocletをダウンロードする. これらは今回の成果物ではなく,それぞれにライセンスがあるので,各自確認されたい. テスト方法は以下.
ant test結果はdoc/testreport/html出力される.

