OpenSSL: Unterschied zwischen den Versionen
Cbs (Diskussion | Beiträge) |
Cbs (Diskussion | Beiträge) (→S/MIME) |
||
(23 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | |||
− | |||
− | |||
==Optionale Parameter fuer die folgenden commandos== | ==Optionale Parameter fuer die folgenden commandos== | ||
+ | |||
-config /path/to/own/my_openssl.cnf | -config /path/to/own/my_openssl.cnf | ||
separate config-datei verwenden. | separate config-datei verwenden. | ||
Zeile 10: | Zeile 8: | ||
Die ist wichtig bei key's fuer serverdienste. oder das passwort<br/> | Die ist wichtig bei key's fuer serverdienste. oder das passwort<br/> | ||
muss beim neustart des dienstes eingegeben werden. | muss beim neustart des dienstes eingegeben werden. | ||
+ | |||
==Request (CSR) erstellen== | ==Request (CSR) erstellen== | ||
+ | |||
openssl req -newkey rsa:2048 -out request.pem -keyout pub-sec-key.pem | 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. | 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 - | + | 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. | Wie zuvor, nur wird der Request zum bereits vorhandenen Schlüssel pub-sec-key.pem generiert. | ||
Zeile 29: | Zeile 29: | ||
openssl x509 -x509toreq -in self-signed-certificate.pem -signkey pub-sec-key.pem -out request.pem | openssl x509 -x509toreq -in self-signed-certificate.pem -signkey pub-sec-key.pem -out request.pem | ||
Erstellt neuen Request aus altem Selbstzertifikat. | 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== | ==Certificate (CRT) erstellen== | ||
+ | |||
openssl req -x509 -days 365 -newkey rsa:2048 \ | openssl req -x509 -days 365 -newkey rsa:2048 \ | ||
-out self-signed-certificate.pem -keyout pub-sec-key.pem | -out self-signed-certificate.pem -keyout pub-sec-key.pem | ||
Zeile 37: | Zeile 44: | ||
openssl req -x509 -days 365 -new -out self-signed-certificate.pem -key pub-sec-key.pem | 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. | Wie zuvor, erstellt jedoch ein selbst signiertes Zertifikat aus einem vorhandenen Schlüssel pub-sec-key.pem. | ||
+ | |||
+ | |||
+ | == ECC Key erstellen == | ||
+ | |||
+ | openssl ecparam -list_curves | ||
+ | List possible curves | ||
+ | |||
+ | openssl ecparam -name secp384r1 -genkey -out private.ecc-key.pem | ||
+ | Erstellt einen elliptic curve key, der zur Generierung eines passenden CSR verwendet werden kann. | ||
+ | |||
+ | == Certifikate konvertieren, ausgeben, pruefen == | ||
openssl x509 -text -noout -md5 -in self-signed-certificate.pem | openssl x509 -text -noout -md5 -in self-signed-certificate.pem | ||
Zeile 54: | Zeile 72: | ||
Gibt die Zertifikats-Widerrufsliste crl.pem in Klartext aus. | 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 -nodes -out ./cert.pem | ||
+ | openssl pkcs12 -in cert.p12 -cacerts -nokeys -nodes -out ./root-chain.pem | ||
+ | openssl pkcs12 -in cert.p12 -nocerts -nodes -out ./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== | ==CRLs== | ||
+ | |||
Die CRL ist eine Widerrufliste in der die ungültigen Zertifikate eingetragen | 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 | sind und Zugänge aufgehoben werden können (z.B. beim Ausscheiden eines | ||
Zeile 82: | Zeile 136: | ||
wöchentlich per Cronjob erstellt werden. | wöchentlich per Cronjob erstellt werden. | ||
− | |||
− | |||
===das Zertifikat von 'meier' entfernen=== | ===das Zertifikat von 'meier' entfernen=== | ||
+ | |||
openssl ca -revoke meiercert.pem | openssl ca -revoke meiercert.pem | ||
+ | |||
oder | oder | ||
+ | |||
openssl ca -revoke ./newcerts/03.pem' | openssl ca -revoke ./newcerts/03.pem' | ||
+ | |||
===Nummern der gesperrten Zertifikate anzeigen=== | ===Nummern der gesperrten Zertifikate anzeigen=== | ||
+ | |||
openssl crl -in crls/crl.pem -noout -text | 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=== | ===CRL in das binäre DER-Format umwandeln=== | ||
+ | |||
openssl crl -in crls/crl.pem -outform der -out crls/cert.crl | 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 [https://kb.wisc.edu/middleware/page.php?id=4064 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 cert.pem -noout -fingerprint -sha256 | tr -d ":" | sed 's/SHA256 Fingerprint=//' | ||
+ | |||
+ | |||
+ | ==S/MIME== | ||
+ | |||
+ | ===Sign Message=== | ||
+ | |||
+ | openssl smime -sign -in in.txt -text -out mail.msg -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem | ||
+ | |||
+ | |||
+ | ===Extract Signature=== | ||
+ | |||
+ | openssl smime -verify -in message.eml -noverify -signer cert.pem -out textdata.txt | ||
+ | |||
+ | Signer certificate will be saved as cert.pem<br/> | ||
+ | Body text will be saved to textdata.txt |
Aktuelle Version vom 12. April 2024, 07:07 Uhr
Inhaltsverzeichnis
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.
ECC Key erstellen
openssl ecparam -list_curves
List possible curves
openssl ecparam -name secp384r1 -genkey -out private.ecc-key.pem
Erstellt einen elliptic curve key, der zur Generierung eines passenden CSR verwendet werden kann.
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 -nodes -out ./cert.pem openssl pkcs12 -in cert.p12 -cacerts -nokeys -nodes -out ./root-chain.pem openssl pkcs12 -in cert.p12 -nocerts -nodes -out ./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 cert.pem -noout -fingerprint -sha256 | tr -d ":" | sed 's/SHA256 Fingerprint=//'
S/MIME
Sign Message
openssl smime -sign -in in.txt -text -out mail.msg -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem
Extract Signature
openssl smime -verify -in message.eml -noverify -signer cert.pem -out textdata.txt
Signer certificate will be saved as cert.pem
Body text will be saved to textdata.txt