Herausfinden, ob ein Zertifikat einen Elliptic-Curve- oder einen RSA-Schlüssel hat
Sie können openssl verwenden, um herauszufinden, ob Ihr Zertifikat eine Elliptic Curve (z.B. ECDSA) oder einen RSA-Schlüssel verwendet, mit dem folgenden Befehl, wobei Sie cert.pem durch den Pfad Ihres Zertifikats ersetzen:
Wenn der Schlüssel des Zertifikats ein Elliptic-Curve-Schlüssel ist, wird ausgegeben:
Wenn der Schlüssel des Zertifikats ein anderer Schlüsseltyp wie ein RSA-Schlüssel ist, wird ausgegeben:
Funktionsweise
Zuerst weisen wir OpenSSL an, Informationen über das Zertifikat auszugeben:
Dann suchen wir mit grep nach ecPublicKey. Dies liegt daran, dass für Elliptic-Curve-Schlüssel die Ausgabe des obigen openssl-Befehls Folgendes enthält
Public Key Algorithm: id-ecPublicKey
Public-Key: (384 bit)
pub:während es für RSA-Schlüssel so aussieht:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:Der grep-Befehl wird nach /dev/null weitergeleitet, da wir nicht an seiner Ausgabe interessiert sind, sondern nur an seinem Rückgabewert (der in der Shell als $? verfügbar ist). grep gibt einen Rückgabewert von 0 zurück, wenn und nur wenn es mindestens eine Übereinstimmung in der Eingabe findet. Andernfalls hat es einen Rückgabewert von 1. In unserem Fall bedeutet dies, dass wir einen Rückgabewert von 0 erhalten, wenn ecPublicKey irgendwo in der Ausgabe erscheint. Wir nehmen an, dass diese Zeichenfolge nur im Abschnitt Subject Public Key Info: auftreten wird. Während es theoretisch möglich ist, dass ecPublicKey in benutzerdefinierten Feldern des Zertifikats erscheint, ist dies äußerst unwahrscheinlich und könnte durch die Verwendung eines regulären Ausdrucks in grep abgemildert werden
Wir können dann dieses bash-Snippet verwenden:
then
# TODO Code einfügen, falls grep NICHTS findet
else
# TODO Code einfügen, falls grep mindestens eine Zeile findet
fidas wir so verwenden:
d.h. abhängig vom Rückgabewert von grep geben wir die korrekte Meldung aus.