Written by georg
on September 8, 2017
Es ist nicht ausreichend nur den Private Key zu überprüfen!
OpenSSL bietet auch eine einfache Möglichkeit einen CSR zu prüfen:
openssl req -in example.csr -verify verify OK
Beim Public Key wird es komplizierter. Einzig eine Prüfung mit der Signatur der übergeordneten CA hilft. Hier eine erste Version eines Prüfscriptes.
#!/bin/bash
if [[ $# -ne 1 ]]; then
echo "Wrong number of arguments."
exit 1
fi
FILE=$1
# Allows to configure different openssl version
OPENSSL=$(which openssl)
TEMPDIR="/tmp
USERAGENT="CustomUserAgent"
# A proxy server would also get configured here
WGETOPTS="--user-agent=${USERAGENT} --timeout=5 --tries=1 -e"
SIGNER=$($OPENSSL x509 -in ${FILE} -text -noout | grep "CA Issuers - URI:http" | cut -d":" -f2- | tr -d '\r')
if [[ -z $SIGNER ]]; then
echo "No issuer certificate found for download."
exit 1
fi
SIGNERFILE=$(awk -F'/' '{print $NF}' <<<$SIGNER)
/usr/bin/wget $WGETOPTS $SIGNER -O $TEMPDIR/$SIGNERFILE >/dev/null 2>&1
# Try to convert to PEM
$OPENSSL x509 -inform der -in $TEMPDIR/$SIGNERFILE -out $TEMPDIR/$SIGNERFILE.cer 2>/dev/null
if [[ -s $TEMPDIR/$SIGNERFILE.cer ]]; then
# use converted file, if conversation was successfull
SIGNERFILE="$SIGNERFILE.cer"
fi
echo -n "Certificate verification: "
$OPENSSL verify -CAfile $TEMPDIR/$SIGNERFILE -partial_chain $FILE 2>&1 | grep -e "certificate signature failure" -e "OK" | cut -d":" -f2
# Cleanup
if [[ ! -z $SIGNERFILE ]]; then
/bin/rm $TEMPDIR/$SIGNERFILE*
fi

Schreibe einen Kommentar