| #!/bin/bash |
| |
| # This is a simple bash wrapper for CentOS SIG and using fasjson-client with some values |
| # Goal is to retrieve signed TLS cert for user accounts, using kerberos ticket and then using the fasjson endpoint |
| |
| function usage() { |
| cat << EOF |
| |
| You need to call the script like this : $0 -arguments |
| -u : username ([REQUIRED] : your existing ACO/FAS username) |
| -v : just validates the existing TLS certificate ([OPTIONAL]) |
| -r : REALM to use for kerberos ([OPTIONAL] : defaults to FEDORAPROJECT.ORG) |
| -f : fasjson url ([OPTIONAL]: defaults to https://fasjson.fedoraproject.org) |
| -h : display this help |
| |
| EOF |
| |
| } |
| |
| function varcheck() { |
| if [ -z "$1" ] ; then |
| usage |
| exit 1 |
| fi |
| } |
| |
| function f_log() { |
| echo "[+] $(date +%Y%m%d-%H:%M) centos-cert -> $*" |
| } |
| |
| function verify_cert() { |
| echo "" |
| f_log "Verifying if TLS cert is still valid ..." |
| if [ ! -e ~/.centos-server-ca.cert ] ; then |
| f_log "[ERROR] No CA cert found to validate your TLS cert" |
| f_log "Please retrieve it first with [$0 -u]" |
| exit 1 |
| fi |
| if [ -e ~/.centos.cert ] ; then |
| f_log "Validating TLS cert against ~/.centos-server-ca.cert ..." |
| openssl verify -CAfile ~/.centos-server-ca.cert ~/.centos.cert |
| if [ "$?" -ne "0" ] ; then |
| f_log "[ERROR] your TLS cert is not signed by correct CA" |
| exit 1 |
| else |
| f_log "[SUCCESS] ~/.centos.cert TLS cert verified by ~/.centos-server-ca.cert CA crt" |
| fi |
| end_date=$(openssl x509 -in ~/.centos.cert -noout -text|sed -n 's/ *Not After : *//p') |
| end_date_seconds=$(date '+%s' --date "$end_date") |
| now_seconds=$(date '+%s') |
| remaining_days=$(echo "($end_date_seconds-$now_seconds)/24/3600" | bc) |
| if [ "${remaining_days}" -gt "0" ] ; then |
| f_log "[SUCCESS] Your TLS cert is still valid for [${remaining_days}] days" |
| echo "" |
| exit 0 |
| else |
| f_log "[ERROR] Your TLS cert has expired : [${remaining_days}] days" |
| echo "" |
| exit 1 |
| fi |
| else |
| f_log "[WARNING] : no TLS cert found so running this script to first get one" |
| echo "" |
| fi |
| } |
| |
| function check_url() { |
| echo "" |
| f_log Validating user [${fasjson_user}] with realm [${fasjson_realm}] against ${fasjson_url} |
| curl --fail --negotiate -u : ${fasjson_url}/v1/me/ --silent >/dev/null |
| if [ "$?" -ne "0" ] ; then |
| f_log "Not able to negotiate kerberos with ${fasjson_url} ..." |
| f_log "Forcing kinit to obtain valid kerberos ticket :" |
| kinit ${fasjson_user}@${fasjson_realm} || (f_log "Not able to get kerberos ticket .." ; exit 1) |
| else |
| f_log "We can reach [${fasjson_url}] with realm [${fasjson_user}@${fasjson_realm}], so now asking for TLS cert ..." |
| fi |
| } |
| |
| function get_cert(){ |
| fasjson-client --verbose --url ${fasjson_url} get-cert -u ${fasjson_user} -p ~/.centos-${fasjson_user}.key -s ~/.centos-${fasjson_user}.crt --overwrite |
| if [ "$?" -ne "0" ] ; then |
| f_log "[ISSUE] : Unable to retrieve TLS cert" |
| exit 1 |
| else |
| f_log "Concatenating cert to ~/.centos.cert" |
| cat ~/.centos-${fasjson_user}.key ~/.centos-${fasjson_user}.crt > ~/.centos.cert |
| fi |
| f_log "Downloading correct CA cert .." |
| curl --fail --silent ${ca_url} > ~/.centos-server-ca.cert CA crt |
| echo "" |
| } |
| |
| |
| while getopts "hu:r:vf:" option |
| do |
| case ${option} in |
| h) |
| usage |
| exit 1 |
| ;; |
| u) |
| opt_user=${OPTARG} |
| ;; |
| r) |
| opt_realm=${OPTARG} |
| ;; |
| v) |
| verify_cert |
| exit |
| ;; |
| f) |
| opt_fasjson_url=${OPTARG} |
| ;; |
| ?) |
| usage |
| exit |
| ;; |
| esac |
| done |
| |
| # Parsing and assigning default values if needed |
| fasjson_user=${opt_user:-$USER} |
| fasjson_realm=${opt_realm:-FEDORAPROJECT.ORG} |
| fasjson_url=${opt_fasjson_url:-https://fasjson.fedoraproject.org} |
| if [[ "$fasjson_url" =~ "fasjson.stg*" ]] ; then |
| ca_url="https://id.stg.fedoraproject.org/ipa/config/ca.crt" |
| else |
| ca_url="https://id.fedoraproject.org/ipa/config/ca.crt" |
| fi |
| |
| |
| # Now the real work and calling functions |
| if [ "$#" -eq "0" ] ;then |
| usage |
| exit 1 |
| fi |
| check_url |
| get_cert |
| verify_cert |
| |