SSL証明書発行を自動化しコマンド化


やったこと

頻繁にSSL証明書を作成する必要があったので、いちいち入力するのは手間ですしコマンド化しました。
コマンド化手順→ 【超簡単】1分で独自コマンドを作ってみる(Mac・Linux)

セットアップ

下記のシェルスクリプトを mycsc という名前でコマンド化しておく
(コード上部の情報を自分のものに書き換えてください)

mycsc.sh
#!/bin/bash
#mycsc csc = create SSL Sertificate

#---実行前に下記の情報を入力してください(全て英語で)--------------------

COUNTRY="国 日本ならJP"
PROVINCE="都道府県"
LOCALITY="市町村"
ORGANIZATION="会社名"
ORGANIZATION_UNITNAME="所属部署名"
COMMON_NAME="自分の名前"
EMAIL="メールアドレス"

#---------------------------------------------------

#すでに.sslディレクトリが存在すれば削除
if [[ -e ./.ssl ]]; then
        rm -r .ssl
fi

#.sslディレクトリ作成 & 移動
mkdir .ssl && cd .ssl

#20文字のパスワード生成
password=`openssl rand -base64 12 | fold -w 20 | head -1`

#opensslコマンドを実行し、情報を自動入力する
expect -c "
        set timeout 3
        spawn openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365
        expect \"Enter PEM pass phrase:\" {
         send \"${password}\n\"
         exp_continue
        } \"Country Name\" {
         send \"${COUNTRY}\n\"
         exp_continue
        } \"State or Province Name\" {
         send \"${PROVINCE}\n\"
         exp_continue
        } \"Locality Name\" {
         send \"${LOCALITY}\n\"
         exp_continue
        } \"Organization Name\" {
         send \"${ORGANIZATION}\n\"
         exp_continue
        } \"Organizational Unit Name\" {
         send \"${ORGANIZATION_UNITNAME}\n\"
         exp_continue
        } \"Common Name\" {
         send \"${COMMON_NAME}\n\"
         exp_continue
        } \"Email Address\" {
         send \"${EMAIL}\n\"
         exp_continue
        } timeout {
         exit 1
        }
"

if [ $? -eq 1 ]; then
        echo "入力がタイムアウトしkeytemp.pemを作成できませんでした。情報が正しいか確認してください"
        exit
fi

#opensslコマンドを実行し、情報を自動入力
expect -c "
        set timeout 3
        spawn openssl rsa -in keytmp.pem -out key.pem
        expect \"Enter pass phrase for keytmp.pem\" {
         send \"${password}\n\"
         exp_continue
        } timeout {
         exit 1
        }
"

if [ $? -eq 1 ]; then
        echo "入力がタイムアウトしkey.pemを作成できませんでした。keytemp.pemとcert.pemを削除します"
        rm keytemp.pem cert.pem
        exit
fi

#keytemp.pemを削除し完了
rm keytmp.pem
echo "SSL証明書発行完了しました!"

使い方

SSL証明書を発行したいディレクトリに移動し、 mycsc を叩くだけ