Edited at

【ShellScript】キーストアに電子証明書をインポートする

More than 1 year has passed since last update.


経緯

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