経緯
JavaのWebアプリケーションにて、電子署名されたXMLの出力機能を実装中です。
電子証明書あれこれ
実際の運用を考えたときに、元となる電子証明書がキーストアにインポートされている必要があったり、失効した電子証明書の差し替え作業が発生するため、それをいちいちコマンドを叩いてやっていくのは面倒です。
なので、シェルスクリプトを用意することにしました。
以下、参考にしながら作りました
このスクリプトがやっていること
・キーストアを作成
・キーストアのファイル権限を変更(その他ユーザーに書き込み権限を付与)
・デフォルトでインポートされている証明書(mykey)を削除
・キーストアに証明書をインポート
ソース(随時修正予定)
certset.sh
#!/usr/bin/bash
#変数定義
cn="test1"
ou="test2"
o="test3"
c="JP"
keystore="testkeystore"
certpass="/Users/XXXXXX/XXXXXX"
certnm="testcrt.p12"
keypass="password"
storepass="changeit"
srcalias="1"
destalias="999999"
#各コマンド
cmdcd="cd ${certpass}"
cmdgenkey="keytool -genkey -dname \"cn=${cn}, ou=${ou}, o=${o}, c=${c}\" -keystore ${keystore} -keypass ${keypass} -storepass ${storepass}"
cmdchmodstore="chmod o+w ${keystore}"
cmddelmykey="keytool -delete -alias mykey -keystore ${keystore} -storepass ${storepass}"
cmdimportkey="keytool -importkeystore -keystore ${keystore} -srckeystore ${certpass}/${certnm} -srcstoretype PKCS12 -srcalias ${srcalias} -destalias ${destalias} -srcstorepass ${keypass} -deststorepass ${storepass}"
cmdlistv="keytool -list -v -alias ${destalias} -keystore ${keystore} -storepass ${storepass}"
#コマンド実行
echo "証明書配置:1 設定変更:2 番号を入力してください。"
read select
if [ $select = "1" ]; then
echo "キーストアを作成しますか? [Y/n] "
read key
if [ $key = "y" ]; then
eval $cmdcd
eval $cmdgenkey
eval $cmdchmodstore
eval $cmddelmykey
fi
eval $cmdimportkey
#eval $cmdlistv
else
echo 以下設定値を変更します。番号を入力してください。
echo 1: 証明書のファイル名 現在の設定値:$certnm
echo 2: 証明書のパスワード 現在の設定値:$certpass
echo 3: 証明書の元のエイスアス 現在の設定値:$srcalias
echo 4: 証明書の新規エイリアス 現在の設定値:$destalias
echo 5: キーストアのファイル名 現在の設定値:$keystore
echo 6: キーストアのパスワード 現在の設定値:$storepass
#echo 7: 証明書の配置場所 現在の設定値:$certpath
echo
echo 入力値:
read setnum
case "$setnum" in
"1" )
echo 「証明書のファイル名」の値を変更します。値を入力してください。
paramkey=certnm
trg=${certnm:0:${#certnm}};;
"2" )
echo 「証明書のパスワード」の値を変更します。値を入力してください。
paramkey=certpass
trg=${certpass:0:${#certpass}};;
"3" )
echo 「証明書のパスワード」の値を変更します。値を入力してください。
paramkey=srcalias
trg=${srcalias:0:${#srcalias}};;
"4" )
echo 「証明書の新規エイリアス」の値を変更します。値を入力してください。
paramkey=destalias
trg=${destalias:0:${#destalias}};;
"5" )
echo 「キーストアのファイル名」の値を変更します。値を入力してください。
paramkey=keystore
trg=${keystore:0:${#keystore}};;
"6" )
echo 「キーストアのパスワード」の値を変更します。値を入力してください。
paramkey=storepass
trg=${storepass:0:${#storepass}};;
#"7" )
# echo 「証明書の配置場所」の値を変更します。値を入力してください。
# paramkey=certpath
# trg=${certpath:0:${#certpath}};;
esac
echo 入力値:
read paramval
before="$paramkey=\"$trg\""
after="$paramkey=\"$paramval\""
sed -i -e "s/$before/$after" certset.sh
fi