#!/bin/sh # # About # ----- # Check the expiry date of the SSL certificate on the given host. # # License # ------- # Copyright (c) 2013-2015 by Steve Kemp. All rights reserved. # # This script is free software; you can redistribute it and/or modify it under # the same terms as Perl itself. # # The LICENSE file contains the full text of the license. # Simple function to show usage information, and exit. usage() { echo "Usage: $0 [-d] [-p 443] domain1.org domain2.com .. domainN" exit 0 } # Default settings for flags set by the command-line arguments days=0 port=443 # Parse the argument(s) - i.e. look for "-d" / "-p 443". while getopts "h?dp:" opt; do case $opt in h) usage ;; \?) usage ;; d) days=1 ;; p) port=$OPTARG ;; esac done shift $((OPTIND - 1)) # Ensure we have some arguments if [ "$#" = "0" ]; then usage fi # For each domain-name on the command-line. for name in "$@"; do # Make a temporary file # Test if we have BSD or GNU version of mktemp if (strings "$(which mktemp)" | grep -q GNU); then # We have the GNU version tmp=$(mktemp) else # We have the BSD version tmp=$(mktemp -t tmp) fi # Download the certificate if (! echo "" | openssl s_client -connect "$name:$port" > "$tmp" 2> /dev/null); then echo "Failed to get cert from https://$name:$port/" exit 3 fi # Get the expiry date date=$(openssl x509 -in "$tmp" -noout -enddate | awk -F= '{print $2}') # Remove the temporary file rm -f "$tmp" # Convert the expiry date + todays date to seconds-past epoch # Check if we have the BSD or the GNU version of date if (strings "$(which date)" | grep -q GNU); then # We have GNU this is easy then=$(date --date "$date" +%s) else # We have BSD now it is getting complicated year=$(echo "$date" | awk '{print $4}') month=$(echo "$date" | awk '{print $1}') day=$(echo "$date" | awk '{print $2}') hour=$(echo "$date" | awk '{print $3}' | awk -F: '{print $1}') minute=$(echo "$date" | awk '{print $3}' | awk -F: '{print $2}') second=$(echo "$date" | awk '{print $3}' | awk -F: '{print $3}') then=$(date -v${year}y -v${month} -v${day}d -v${hour}H -v${minute}M -v${second}S -u +%s) fi now=$(date +%s) # Day diff diff=$(("$then" - "$now")) diff=$($diff / 86400) # All done if [ "$days" = "1" ]; then echo "${name}: ${diff}" else echo "$name" echo " Expires: ${date}" echo " Days: ${diff}" fi done