| #!/bin/bash |
| ######### |
| # ============LICENSE_START==================================================== |
| # org.onap.aaf |
| # =========================================================================== |
| # Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. |
| # =========================================================================== |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # ============LICENSE_END==================================================== |
| # |
| # Streamlined AAF Bootstrap initial Cert |
| # Removed Variables so it can be run for AutoDeployments |
| # |
| echo "Bootstrap AAF Certificate" |
| mkdir -p private certs newcerts |
| chmod 700 private |
| chmod 755 certs newcerts |
| touch index.txt |
| echo "unique_subject = no" > index.txt.attr |
| if [ ! -e ./serial ]; then |
| echo $(date +%s)_$(shuf -i 0-1000000 -n 1) > ./serial |
| fi |
| |
| NAME=aaf.bootstrap |
| HOSTNAME="${HOSTNAME:=$(hostname -)}" |
| FQDN="${aaf_locator_fqdn:=$HOSTNAME}" |
| FQI=aaf@aaf.osaaf.org |
| SUBJECT="/CN=$FQDN/OU=$FQI`cat subject.aaf`" |
| SIGNER_P12=$1 |
| SIGNER_KEY=/tmp/aaf_signer.key |
| SIGNER_CRT=/tmp/aaf_signer.crt |
| PASSPHRASE=$2 |
| if [ "PASSPHRASE" = "" ]; then |
| PASSPHRASE="something easy" |
| fi |
| BOOTSTRAP_SAN=/tmp/$NAME.san |
| BOOTSTRAP_KEY=/tmp/$NAME.key |
| BOOTSTRAP_CSR=/tmp/$NAME.csr |
| BOOTSTRAP_CRT=/tmp/$NAME.crt |
| BOOTSTRAP_CHAIN=/tmp/$NAME.chain |
| BOOTSTRAP_P12=$NAME.p12 |
| BOOTSTRAP_ISSUER=$NAME.issuer |
| |
| |
| # If Signer doesn't exist, create Self-Signed CA |
| if [ ! -e "$SIGNER_P12" ]; then |
| # Creating Signer CA |
| openssl req -config openssl.conf -x509 -sha256 -extensions v3_ca \ |
| -newkey rsa:4096 -subj /CN="Signer$(cat subject.aaf)" \ |
| -keyout $SIGNER_KEY -out $SIGNER_CRT -days 365 -passout stdin << EOF |
| $PASSPHRASE |
| EOF |
| |
| # Move to P12 (Signer) |
| openssl pkcs12 -name RootCA -export -in $SIGNER_CRT -inkey $SIGNER_KEY -out $SIGNER_P12 -passin stdin -passout stdin << EOF |
| $PASSPHRASE |
| $PASSPHRASE |
| $PASSPHRASE |
| EOF |
| |
| else |
| # Get Private key from P12 |
| openssl pkcs12 -in $SIGNER_P12 -nocerts -nodes -passin stdin -passout stdin -out $SIGNER_KEY << EOF |
| $PASSPHRASE |
| $PASSPHRASE |
| EOF |
| |
| # Get Cert from P12 |
| openssl pkcs12 -in $SIGNER_P12 -clcerts -nokeys -passin stdin -out $SIGNER_CRT << EOF |
| $PASSPHRASE |
| EOF |
| |
| fi |
| |
| # SANS |
| cp san.conf $BOOTSTRAP_SAN |
| SANS=$FQDN |
| if [ "$FQDN" -ne "$HOSTNAME" ]; then |
| SANS="$SANS $HOSTNAME" |
| fi |
| |
| for ROOT in $(cat san_root.aaf); do |
| SANS="$SANS $ROOT" |
| for C in service locate oauth token introspect gui cm hello; do |
| SANS="$SANS $C.$ROOT" |
| done |
| done |
| |
| for C in service locate oauth token introspect gui cm hello; do |
| SANS="$SANS aaf-$C" |
| SANS="$SANS aaf-$C.onap" |
| done |
| |
| NUM=1 |
| for D in $SANS; do |
| echo "DNS.$NUM = $D" >> $BOOTSTRAP_SAN |
| NUM=$((NUM+1)) |
| done |
| |
| # Create CSR |
| openssl req -new -newkey rsa:2048 -nodes -keyout $BOOTSTRAP_KEY \ |
| -out $BOOTSTRAP_CSR -outform PEM -subj "$SUBJECT" \ |
| -passout stdin << EOF |
| $PASSPHRASE |
| EOF |
| |
| echo Sign it |
| openssl ca -batch -config openssl.conf -extensions server_cert \ |
| -cert $SIGNER_CRT -keyfile $SIGNER_KEY \ |
| -policy policy_loose \ |
| -days 365 \ |
| -passin stdin \ |
| -out $BOOTSTRAP_CRT \ |
| -extfile $BOOTSTRAP_SAN \ |
| -infiles $BOOTSTRAP_CSR << EOF |
| $PASSPHRASE |
| EOF |
| |
| # Make a P12 |
| # Add THIS Intermediate CA into chain |
| cat $BOOTSTRAP_CRT |
| cp $BOOTSTRAP_CRT $BOOTSTRAP_CHAIN |
| cat $SIGNER_CRT >> $BOOTSTRAP_CHAIN |
| cat $BOOTSTRAP_CHAIN |
| |
| # Note: Openssl will pickup and load all Certs in the Chain file |
| #openssl pkcs12 -name $FQI -export -in $BOOTSTRAP_CRT -inkey $BOOTSTRAP_KEY -CAfile $SIGNER_CRT -out $BOOTSTRAP_P12 -passin stdin -passout stdin << EOF |
| openssl pkcs12 -name $FQI -export -in $BOOTSTRAP_CHAIN -inkey $BOOTSTRAP_KEY -out $BOOTSTRAP_P12 -passin stdin -passout stdin << EOF |
| $PASSPHRASE |
| $PASSPHRASE |
| $PASSPHRASE |
| EOF |
| |
| # Make Issuer name |
| ISSUER=$(openssl x509 -subject -noout -in $SIGNER_CRT | cut -c 9- | sed -e 's/ = /=/g' -e 's/\//, /g') |
| for I in $ISSUER; do |
| if [ -z "$REVERSE" ]; then |
| REVERSE="${I%,}" |
| else |
| REVERSE="${I%,}, ${REVERSE}" |
| fi |
| done |
| echo "$REVERSE" > $BOOTSTRAP_ISSUER |
| |
| # Cleanup |
| rm -f $BOOTSTRAP_SAN $BOOTSTRAP_KEY $BOOTSTRAP_CSR $BOOTSTRAP_CRT $SIGNER_KEY $SIGNER_CRT $BOOTSTRAP_CHAIN |