xedlock

grab a server's public SSL certificate and save it to disk

Oct 15th, 2014
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.48 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. if [[ -z $1 ]]; then
  4.     echo "Need a hostname."
  5.     exit 1
  6. fi
  7.  
  8. AWK=$( which gawk )
  9. if [[ $? -ne 0 ]]; then
  10.     AWK=$( which awk )
  11. fi
  12.  
  13. WORKDIR=$( mktemp -d -t get_cert )
  14. abort() {
  15.     EC=$?
  16.     rm -rf $WORKDIR
  17.     echo "Exiting: $EC"
  18. }
  19.  
  20. HDIR="$(pwd)"
  21.  
  22. PORT="$( echo "$1" | cut -d ":" -f 2 )"
  23. if [[ -z $PORT ]]; then
  24.     echo "No port specified."
  25.     exit 1
  26. else
  27.     SERVICE="$( grep -E "\b$PORT\b" /etc/services | awk '{print $1}' | head -n1 )"
  28.     if [[ -z $SERVICE ]]; then
  29.         SERVICE=$PORT
  30.     fi
  31. fi
  32.  
  33. HOST="$1"
  34.  
  35. shift
  36. if [[ -n $1 ]]; then
  37.     EXTRA=$@
  38. else
  39.     EXTRA=""
  40. fi
  41.  
  42.  
  43. pushd $WORKDIR > /dev/null 2>&1
  44. echo "QUIT" | openssl s_client -showcerts $EXTRA -connect ${HOST} 2>&1 | $AWK 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "excert" n }'
  45.  
  46. for certfile in $( grep -l "BEGIN CERTIFICATE" excert* ); do
  47.     NEWCERT=${certfile}.crt
  48.     cat $certfile | openssl x509 > $NEWCERT
  49.     SUBJECT=$( cat $NEWCERT | openssl x509 -noout -subject | grep -Eo "CN=.*" | cut -d "=" -f 2- | sed -e 's/[^a-zA-Z0-9_\.-]/_/g' )
  50.     LOOP=0
  51.     APPEND=""
  52.     while [[ 1 -eq 1 ]]; do
  53.         NEWNAME="${SUBJECT}_${SERVICE}${APPEND}.crt"
  54.         if [[ -f "$HDIR/$NEWNAME" ]]; then
  55.             LOOP=$(( $LOOP + 1 ))
  56.             APPEND="_$LOOP"
  57.         else
  58.             break
  59.         fi
  60.     done
  61.     mv $NEWCERT "$HDIR/$NEWNAME"
  62.     rm -f $certfile
  63.     echo "${NEWNAME} created."
  64. done
  65. popd  > /dev/null
Advertisement
Add Comment
Please, Sign In to add comment