OpenSSL: Unterschied zwischen den Versionen

Aus SchnallIchNet
Wechseln zu: Navigation, Suche
(PKCS12 conversion)
Zeile 185: Zeile 185:
  
 
  openssl verify -verbose -CAfile cacert.pem  server.crt
 
  openssl verify -verbose -CAfile cacert.pem  server.crt
 +
 +
 +
== Pinning / TLSA / etc. ==
 +
 +
=== Get public key PIN ===
 +
 +
Get PIN from CERT:
 +
 +
openssl x509 -in cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
 +
 +
 +
Get PIN from KEY:
 +
 +
openssl rsa -in privkey.pem -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64
 +
 +
 +
Get PIN from ECC KEY:
 +
 +
openssl ec -in privkey.pem -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64
 +
 +
 +
Get PIN from CSR:
 +
 +
openssl req -in signing-request.csr -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
 +
 +
 +
=== TLSA hash ===
 +
 +
openssl x509 -in /etc/letsencrypt/live/siliconhome.de/cert.pem -noout -fingerprint -sha256 | tr -d ":" | sed 's/SHA256 Fingerprint=//'

Version vom 10. September 2020, 06:57 Uhr

Optionale Parameter fuer die folgenden commandos

-config /path/to/own/my_openssl.cnf

separate config-datei verwenden.

-nodes

verhindert das verschluesseln des key mit einem Passwort.
Die ist wichtig bei key's fuer serverdienste. oder das passwort
muss beim neustart des dienstes eingegeben werden.


Request (CSR) erstellen

openssl req -newkey rsa:2048 -out request.pem -keyout pub-sec-key.pem

Generiert einen neuen 2048 Bit langen RSA-Schlüssel und legt ihn in der Datei pub-sec-key.pem ab. Passend dazu wird ein Request in der Datei request.pem erstellt.

openssl req -new -out request.pem -key pub-sec-key.pem

Wie zuvor, nur wird der Request zum bereits vorhandenen Schlüssel pub-sec-key.pem generiert.

openssl req -text -noout -in request.pem

Zeigt den Request request.pem an.

openssl req -verify -noout -in request.pem

Verifiziert die Selbstsignatur des Requests request.pem.

openssl req -noout -modulus -in request.pem | openssl sha1 -c

Generiert einen SHA1-Fingerabdruck vom Modulus des Schlüssels aus dem Request request.pem.

openssl x509 -x509toreq -in self-signed-certificate.pem -signkey pub-sec-key.pem -out request.pem

Erstellt neuen Request aus altem Selbstzertifikat.


Request (CSR) mit CA signieren

openssl ca -out certs/openVPN_Vorname.Nachname.crt -in openVPN_Vorname.Nachname.csr


Certificate (CRT) erstellen

openssl req -x509 -days 365 -newkey rsa:2048 \
-out self-signed-certificate.pem -keyout pub-sec-key.pem

Generiert einen 2048 Bit langen RSA-Schlüssel und legt ihn in der Datei pub-sec-key.pem ab. Es wird ein selbst signiertes Zertifikat erstellt und in der Datei self-signed-certificate.pem gespeichert. Das Zertifikat ist 365 Tag gültig und für simple Testzwecke gedacht.

openssl req -x509 -days 365 -new -out self-signed-certificate.pem -key pub-sec-key.pem

Wie zuvor, erstellt jedoch ein selbst signiertes Zertifikat aus einem vorhandenen Schlüssel pub-sec-key.pem.


Certifikate konvertieren, ausgeben, pruefen

openssl x509 -text -noout -md5 -in self-signed-certificate.pem

Gibt das Zertifikat self-signed-certificate.pem als Klartext aus.

openssl x509 -fingerprint -noout -md5 -in self-signed-certificate.pem

Gibt den Fingerabdruck des X.509 Zertifikats self-signed-certificate.pem aus. Der Algorithmus ist hier MD5, SHA1 kann verwendet werden, wenn -md5 durch -sha1 ersetzt wird.

openssl verify -issuer_checks -CAfile self-signed-certificate.pem self-signed-certificate.pem

Überprüft ein selbst signiertes Zertifikat.

openssl s_client -showcerts -CAfile self-signed-certificate.pem -connect www.dfn-pca.de:443

Baut eine OpenSSL-Verbindung unter Verwendung des Zertifikats self-signed-certificate.pem zum angegebenen Server auf. Es wird dabei die gesamte Zertifikatskette angezeigt.

openssl crl -noout -text -CAfile self-signed-certificate.pem crl.pem

Gibt die Zertifikats-Widerrufsliste crl.pem in Klartext aus.


PKCS12/PFX conversion

Create PKCS12 from PEM:

openssl pkcs12 -export -in myCertificate.crt -inkey myCertificate.key -certfile cacert.pem -out myCertificate.pkcs12


export pem's from pkcs12-files:

openssl pkcs12 -in cert.p12 -clcerts -nokeys -out /etc/ipsec.d/cert.pem
openssl pkcs12 -in cert.p12 -cacerts -nokeys -out /etc/ipsec.d/cacerts/root.pem
openssl pkcs12 -in cert.p12 -nocerts -out /etc/ipsec.d/private/key.pem

PKCS7 conversion

openssl pkcs7 -in cert.p7b -inform DER -print_certs -out cert.pem


PEM to DER and DER 2 PEM

Use the OpenSSL commands to convert between formats as follows:

To convert a certificate from PEM to DER:

openssl x509 -in input.crt -inform PEM –out output.crt -outform DER

To convert a certificate from DER to PEM:

openssl x509 -in input.crt -inform DER -out output.crt -outform PEM

To convert a key from PEM to DER:

openssl rsa -in input.key -inform PEM -out output.key -outform DER

To convert a key from DER to PEM:

openssl rsa -in input.key -inform DER -out output.key -outform PEM

Schluessel (KEY) bearbeiten

veraenderungen an vorhandenen schluesseln vornehmen


Schluessel (KEY) passwort aendern

openssl rsa -in mykey.pem -des3 -out mykey.pem.new

oeffnet einen vorhandenen schluessel und speichert ihn unter verwendung eines anderen passwortes wieder ab.


Schluessel (KEY) passwort entfernen

openssl rsa -in mykey.pem -out mykey.pem.new

oeffnet einen vorhandenen schluessel und speichert ihn OHNE neues passwort wieder ab. (unsicher!!)


CRLs

Die CRL ist eine Widerrufliste in der die ungültigen Zertifikate eingetragen sind und Zugänge aufgehoben werden können (z.B. beim Ausscheiden eines Mitarbeiters). Dazu wird periodisch eine gültige CRL erstellt. Einzelne Zertifikate können dann manuell entfernt werden. Die Sperrung erfolgt dann beim nächsten Anlegen der Liste. Daher sollte die Liste entweder sofort nach deaktivieren eines Zertifikats oder, je nach Dringlichkeit, täglich oder wöchentlich per Cronjob erstellt werden.


das Zertifikat von 'meier' entfernen

openssl ca -revoke meiercert.pem

oder

openssl ca -revoke ./newcerts/03.pem'


Nummern der gesperrten Zertifikate anzeigen

openssl crl -in crls/crl.pem -noout -text


gültige CRL erstellen

openssl ca -gencrl -out crls/crl.pem

dies muss nach JEDEM widerruf von certifikaten gemacht werden!!!!


CRL in das binäre DER-Format umwandeln

openssl crl -in crls/crl.pem -outform der -out crls/cert.crl


Verifying

That a Private Key Matches a Certificate

openssl x509 -noout -text -in server.crt
openssl rsa -noout -text -in server.key

The `modulus' and the `public exponent' portions in the key and the Certificate must match. But since the public exponent is usually 65537 and it's bothering comparing long modulus you can use the following approach:


openssl x509 -noout -modulus -in server.crt | openssl md5
openssl rsa -noout -modulus -in server.key | openssl md5

And then compare these really shorter numbers. With overwhelming probability they will differ if the keys are different. As a "one-liner":

openssl x509 -noout -modulus -in server.pem | openssl md5 ; openssl rsa -noout -modulus -in server.key | openssl md5

And with auto-magic comparison (If more than one hash is displayed, they don't match):

(openssl x509 -noout -modulus -in server.pem | openssl md5 ; openssl rsa -noout -modulus -in server.key | openssl md5) | uniq

BTW, if I want to check to which key or certificate a particular CSR belongs you can compute

$ openssl req -noout -modulus -in server.csr | openssl md5

(Shamelessly stolen from here)


That a cacert matches a server cert

openssl verify -verbose -CAfile cacert.pem  server.crt


Pinning / TLSA / etc.

Get public key PIN

Get PIN from CERT:

openssl x509 -in cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64


Get PIN from KEY:

openssl rsa -in privkey.pem -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64


Get PIN from ECC KEY:

openssl ec -in privkey.pem -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64


Get PIN from CSR:

openssl req -in signing-request.csr -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64


TLSA hash

openssl x509 -in /etc/letsencrypt/live/siliconhome.de/cert.pem -noout -fingerprint -sha256 | tr -d ":" | sed 's/SHA256 Fingerprint=//'