54 lines
1 KiB
Bash
54 lines
1 KiB
Bash
#!/bin/zsh
|
|
|
|
[[ -z $1 ]] && { echo "where to get the cert?" >&2; exit 1; }
|
|
|
|
PORT=${2:-443}
|
|
|
|
fetch() {
|
|
if [[ $1 == "-" ]]
|
|
then
|
|
cat
|
|
elif [[ -f $1 ]]
|
|
then
|
|
fetch_file $1
|
|
else
|
|
fetch_remote $1
|
|
fi
|
|
}
|
|
|
|
fetch_remote() {
|
|
: | openssl s_client -connect $1:${PORT} 2>/dev/null| awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/'
|
|
}
|
|
|
|
fetch_file() {
|
|
cat $1
|
|
}
|
|
|
|
coproc openssl x509 -in /dev/stdin -noout -subject -issuer -startdate -enddate -ext subjectAltName | sed '/X509v3 Subject Alternative Name/ {n ; s/DNS://g ; s/, /\n /g;}'
|
|
|
|
fetch $1 >&p
|
|
|
|
exec 3> >(LC_ALL=C sort)
|
|
|
|
sort=0
|
|
while read -t 0.5 -p line
|
|
do
|
|
if [[ $line = notBefore=* ]]
|
|
then
|
|
date -d ${line#notBefore=} '+Since: %d.%m.%Y %T'
|
|
continue
|
|
elif [[ $line = notAfter=* ]]
|
|
then
|
|
date -d ${line#notAfter=} '+Until: %d.%m.%Y %T'
|
|
continue
|
|
fi
|
|
|
|
|
|
if (( sort == 1 ))
|
|
then
|
|
echo " $line" >&3
|
|
else
|
|
[[ $line = 'X509v3 Subject Alternative Name:' ]] && sort=1
|
|
echo $line
|
|
fi
|
|
done
|