Author: Paolo Lulli <paolo@lulli.net>
Add intermediate CA feature
iron/libexec/iron/iron-ca | 113 +++++++++++++++++++++++++++++++++++++++-
diff --git a/iron/libexec/iron/iron-ca b/iron/libexec/iron/iron-ca index f1b5271c9d5098a986e51b989345f300fe30b058..7a010d2a9d76b02b0aaf0688d3dedf8d97cbe9fd 100755 --- a/iron/libexec/iron/iron-ca +++ b/iron/libexec/iron/iron-ca @@ -1,5 +1,5 @@ #! /bin/bash -# Usage: iron ca <setup|create|delete|reset> +# Usage: iron ca <setup|create|delete|reset> [intermediate] # Summary: manage CA # Help: This command groups commands used to setup config create delete a CA @@ -21,6 +21,22 @@ openssl req -batch -new -key $CAPATH/ca.key -out $CAPATH/ca.csr -config $CA_CONFIG_FILE openssl x509 -req -days ${CA_DAYS} -in $CAPATH/ca.csr -signkey $CAPATH/ca.key -out $CAPATH/ca.crt -extensions v3_ca -extfile $RCDIR/CA/conf/openssl-ca-extensions.conf } +function intermediate_create() +{ + intermediate=$1 + test -d $CAPATH/$intermediate || mkdir -p ./$CAPATH/$intermediate + CA_DAYS=3650 + openssl genrsa -out $CAPATH/$intermediate-ca.key ${KEYSIZE} + openssl req -batch -new -key $CAPATH/$intermediate-ca.key \ + -out $CAPATH/$intermediate-ca.csr -config $CA_CONFIG_FILE + openssl x509 -req -days ${CA_DAYS} \ + -in $CAPATH/$intermediate-ca.csr \ + -signkey $CAPATH/$intermediate-ca.key \ + -out $CAPATH/$intermediate-ca.crt \ + -extensions v3_intermediate_ca \ + -extfile $RCDIR/CA/$intermediate/conf/openssl-intermediate-extensions.conf +} + function ca_home_setup_delete() { echo "About to DELETE ca: are you sure? y/n" @@ -33,6 +49,73 @@ exit -1 fi } +function intermediate_home_setup_delete() +{ + intermediate=$1 + echo "About to DELETE ca: are you sure? y/n" + read confirmation + if [ "$confirmation" = "y" ]; then + (rm -fr $RCDIR/CA/$intermediate ; rm $RCFILE) && echo "CA DELETED" + else + echo "SKIPPING" + exit -1 + fi +} + +function intermediate_home_setup_write() +{ + intermediate=$1 + test -d $RCDIR/CA/$intermediate && ( echo "CA exist, please delete before" && exit -1) + test -d $RCDIR/CA/$intermediate || mkdir -p $RCDIR/CA/$intermediate + test -d $RCDIR/CA/$intermediate/conf || mkdir -p $RCDIR/CA/$intermediate/conf + echo "CAPATH=$RCDIR/CA/$intermediate">${RCFILE} + echo "CA_CONFIG_FILE=$RCDIR/CA/$intermediate/conf/openssl-intermediate.conf">>${RCFILE} + cat<<__EOF__ >$RCDIR/CA/$intermediate/conf/openssl-intermediate-extensions.conf +[ v3_intermediate_ca ] +# Extensions for a typical intermediate CA +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:true, pathlen:0 +keyUsage = critical, digitalSignature, cRLSign, keyCertSign +__EOF__ + + + cat<<__EOF__ >$RCDIR/CA/$intermediate/conf/openssl-intermediate.conf +#RANDFILE = $ENV::HOME/.rnd + +[ req ] +default_bits = ${KEYSIZE} +default_keyfile = keyfile.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no +#output_password = abadpass +default_days =3650 +#x509_extensions = v3_ca + + +[ req_distinguished_name ] +C = SE +ST = Sweden +L = Gotenburg +O = kevwe.se +OU = kevwe.se +CN = kevwe.se +emailAddress = cto@kevwe.se + +[ req_attributes ] +challengePassword = blablabla + +[ v3_intermediate_ca ] +# Extensions for a typical intermediate CA +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:true, pathlen:0 +keyUsage = critical, digitalSignature, cRLSign, keyCertSign + +__EOF__ +} + function ca_home_setup_write() { test -d $RCDIR/CA && ( echo "CA exist, please delete before" && exit -1) @@ -119,6 +202,26 @@ __EOF__ } +if [ "$#" = 2 ];then + operation=$1 + intermediate=$2 + RCFILE="$HOME/"."$APPNAME/$intermediate-ca"".env" + if [ "$operation" = "create" ]; then + test -f ${RCFILE} || ( intermediate_home_setup_write $intermediate; echo "Edit values in ${RCFILE}"; exit -1) + source ${RCFILE} + intermediate_create $intermediate + exit 0 + fi + if [ "$operation" = "setup" ]; then + test -f ${RCFILE} || ( intermediate_home_setup_write $intermediate ; echo "Edit values in ${RCFILE}"; exit 0) + exit 0 + fi + if [ "$operation" = "delete" ]; then + intermediate_home_setup_delete $intermediate + exit 0 + fi +fi + if [ "$#" = 1 ];then operation=$1 RCFILE="$HOME/"."$APPNAME/default-ca"".env" @@ -126,16 +229,18 @@ if [ "$operation" = "create" ]; then test -f ${RCFILE} || ( ca_home_setup_write ; echo "Edit values in ${RCFILE}"; exit -1) source ${RCFILE} ca_create + exit 0 fi if [ "$operation" = "setup" ]; then test -f ${RCFILE} || ( ca_home_setup_write ; echo "Edit values in ${RCFILE}"; exit 0) #source ${RCFILE} + exit 0 fi if [ "$operation" = "delete" ]; then ca_home_setup_delete + exit 0 fi -else - echo "Usage: iron ca <create|setup|delete>" - exit -1 fi +echo "Usage: iron ca <create|setup|delete> [intermediate]" +exit -1