verify

Verify X509 Certificate

Written by  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

Checking SSL Private Keys

Written by  on August 1, 2017

Die ursprüngliche Frage war, wie kann ich feststellen, ob ein Zertifikat zum ursprünglichen Private Key passt. Googelt man die Frage, findet man auf SSLShopper einen Vorschlag, der aber nicht ausreicht sobald jemand Keys manipuliert!
Also muss noch eine zusätzliche Prüfung ins Script:

openssl rsa -in [privatekey] -check

Stellt sich raus, das funktioniert nicht mehr mit OpenSSL 1.1.0, weil eine Funktion einen neuen Namen erhalten hat. Aber die Leute bei OpenSSL sind da schnell und haben das nach meinen freundlichen Hinweis im Masterbranch eingepflegt.

OpenSSL 1.1.0 gibt’s ja jetzt schon etwas länger. Das bedeutet wohl, dass niemand seine Keys prüft. Zumindest nicht mit der aktuellen OpenSSL Version.