oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

スクリプトメモ2

またまたメモ。サーバ証明書とかの作り方をレクチャーしても覚えてくれないからスクリプトにしてみた。これでなんとかみんな作れるようになったみたい。
よかったよかった。それにしても無駄にメニューとか作る必要ないよね・・・。
こういうスクリプト書いてもすぐどっか行っちゃってまた書き直しになる事が多かったから、ここで保存しておけるのは便利だ。
ところどころ適当な英語になっているはご愛嬌。

#!/bin/sh
#####################################################################################################
#基本的な設定として
#秘密鍵:RSA方式1024bit
#SSL暗号化方式:AES-128
#ハッシュアルゴリズム:SHA1で設定しています
#その為AES-128-SHA1での暗号に対応したサーバ証明書と秘密鍵が作成されます
#
#タイトルです
echo "  独自CAによる証明書の作成、自己署名証明書の作成、証明書の配置ができます!!!"
echo

#元からあるopenssl.cnfを編集する為、ファイルのパスを変数にします
ssl_conf=/usr/share/ssl/openssl.cnf


#ここから下は関数です

edit_ssl_conf(){
#元からあるssl.cnfを書き換えて作成環境に合わせます
vi $ssl_conf

}

mk_key_csr(){
#秘密鍵から証明書署名要求まで作ります
openssl genrsa -des3 -out server.key.secure 1024
chmod 400 server.key.secure
openssl rsa -in server.key.secure -out server.key
chmod 400 server.key
openssl req -new -key server.key -out server.csr
rm -f server.key.secure
}

mk_demoCA_folder(){
#独自認証局を作成します。必ずca.confの内容を確認し、正しい内容にして下さい。
cp -p $ssl_conf ca.conf
vi ca.conf
CONFIG="-config ca.conf -batch "
DAYS="-days 9999"
CATOP=./demoCA
CAKEY=./cakey.pem
CACERT=./cacert.pem
REQ="openssl req $CONFIG"

    if [ "1" -o ! -f ${CATOP}/serial ]; then
        mkdir ${CATOP}
        mkdir ${CATOP}/certs
        mkdir ${CATOP}/crl
        mkdir ${CATOP}/newcerts
        mkdir ${CATOP}/private
        chmod 600 ${CATOP}/private
        echo "01" > ${CATOP}/serial
        touch ${CATOP}/index.txt
    fi
    if [ ! -f ${CATOP}/private/$CAKEY ]; then
        echo "Now making CA cert ..."
        $REQ -new -x509 -sha1 -keyout ${CATOP}/private/$CAKEY \
                       -out ${CATOP}/$CACERT $DAYS
        RET=$?
    fi
}

mk_client_crt(){
#クライアントへ設定するルート証明書の作成に使うハッシュ値の変数です
hash=`openssl x509 -noout -in ./demoCA/cacert.pem -hash`

#クライアントへ組みこむルート証明書を作成します
openssl x509 -text -in ./demoCA/cacert.pem |\
grep -e  "-----BEGIN" -A 22 > $hash".0"

}

mk_crt(){
#サーバ証明書を作成し、クライアントへ組みこむルート証明書の「ハッシュ値.0」ファイル作成し
#そのファイルを表示します。
openssl ca -config ca.conf -out server.crt -infiles server.csr
openssl x509 -text -in server.crt
mk_client_crt

}

set_http(){
#apacheに秘密鍵と証明書を配置します
chown apache:apache server.*
chmod 400 server.*
cp -p server.key /etc/httpd/conf/ssl.key/server.key
cp -p server.crt /etc/httpd/conf/ssl.crt/server.crt
}

make_self_crt(){
#自己署名の秘密鍵と証明書を作成します
vi $ssl_conf
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out csr.pem -sha1
openssl x509 -in csr.pem -out server.crt -req -signkey server.key -days 365 -sha1

}



###################################################################################################
#ここから下は独自CA作成メニューです
###################################################################################################



make_original_ca_crt(){
#独自CA作成に必要なメニューです。若い番号から順番に行えば出来上がる!はず・・・
select i in edit_ssl_conf mk_key_csr mk_demoCA_folder mk_crt set_http mk_client_crt quit
do
   case $i in

        edit_ssl_conf)  echo "edit ssl.cnf!!!"
            echo "サーバに元からあるopenssl.cnfを編集します"
                        echo ""
            sleep 3
                        edit_ssl_conf ;;

        mk_key_csr)      echo "make server.key&server.csr!!!"
            echo "秘密鍵と証明書要求を作成します"
                        echo ""
            sleep 3
                        mk_key_csr ;;

        mk_demoCA_folder)       echo "make demoCA!!!独自認証局を作成します"
                        echo ""
            sleep 3
                        mk_demoCA_folder ;;

        mk_crt)          echo "make crt!!!サーバ証明書を作成します"
                        mk_crt ;;

        set_http)       echo "setting to apache!!!"
            echo "サーバ証明書と秘密鍵をapacheに配置します"
                        set_http ;;

        mk_client_crt)       echo "make crt file for client!!"
            echo "クライアント用の証明書を作成します"
                        mk_client_crt ;;

        quit)           echo "ByeBye......."
                        ;;

        *)          echo "No such number." ;;
    esac
    exit
done

}

###################################################################################################
#ここから下はメインメニューです
###################################################################################################

select i in make_original_ca_crt make_self_crt set_http quit

do
   case $i in

        make_original_ca_crt)   echo "make original ca crt file!!!"
                echo "独自認証局による証明書を作成します"
                    sleep 1
                                make_original_ca_crt;;

    make_self_crt)      echo "make self crt file!!!"
                echo "自己署名証明書を作成します"
                sleep 3
                            make_self_crt ;;

        set_http)           echo "setting to apache!!!"
                echo "サーバ証明書と秘密鍵をapacheに配置します"
                sleep 3
                            set_http ;;

        quit)               echo "ByeBye......."
                            ;;
        *)                  echo "No such number." ;;
    esac
    exit
done