LoginSignup
0
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-10-28

経緯

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
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2