verify
Verify X509 Certificate
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
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.