Benutzer-Werkzeuge

Webseiten-Werkzeuge


openssl

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
openssl [2024/10/14 09:32]
jango
openssl [2025/07/03 11:59] (aktuell)
jango [ExtendedKeyUsage]
Zeile 1: Zeile 1:
-Siehe auch [[ssl|SSL]]+Siehe auch [[ssl|SSL]], [[OpenSSL]], [[x509]], [[CA]]
  
 {{openssl.zip|OpenSSL}} {{openssl.zip|OpenSSL}}
Zeile 86: Zeile 86:
  
 =====Zertifikat===== =====Zertifikat=====
 +
 +====Self Signed====
  
 Konfiguration erstellen. Konfiguration erstellen.
Zeile 111: Zeile 113:
 </code> </code>
  
 +====Key Usage====
 +
 +<box green>Beim Erstellen eines Certificate Signing Request (CSR) mit OpenSSL kann man im keyUsage Feld festlegen, wofür das Zertifikat verwendet werden darf.</box>
 +
 +keyUsage ist eine X.509 v3 Extension, die festlegt, welche kryptografischen Operationen der Schlüssel ausführen darf.
 +
 +===KeyUsage===
 +
 +^Wert^Bedeutung^
 +| digitalSignature | Unterschreiben von Daten (z.B. TLS-Handshake, E-Mail) |
 +| nonRepudiation   | Beweis der Herkunft (nicht abstreitbar)               |
 +| keyEncipherment  | Verschlüsselung von Schlüsseln (RSA Key Transport)    |
 +| dataEncipherment | Direktes Verschlüsseln von Nutzdaten                  |
 +| keyAgreement     | Schlüsselvereinbarung (Diffie-Hellman, ECDH)          |
 +| keyCertSign      | Signieren von Zertifikaten (CA-Funktion)              |
 +| cRLSign          | Signieren von Certificate Revocation Lists            |
 +| encipherOnly     | Nur Verschlüsselung bei Schlüsselvereinbarung         |
 +| decipherOnly     | Nur Entschlüsselung bei Schlüsselvereinbarung         |
 +
 +===ExtendedKeyUsage===
 +
 +| Wert                    | Bedeutung                                                       |
 +| **serverAuth**          | Authentifizierung eines Servers (z. B. HTTPS-Serverzertifikat)  |
 +| **clientAuth**          | Authentifizierung eines Clients (z. B. VPN- oder E-Mail-Client) |
 +| **codeSigning**         | Signieren von Software oder Skripten                            |
 +| **emailProtection**     | S/MIME – Schutz und Signatur von E-Mails                        |
 +| **timeStamping**        | Signieren von Zeitstempeln (z. B. bei Signaturerstellung)       |
 +| **OCSPSigning**         | Signieren von OCSP-Responses                                    |
 +| **msSGC**               | Microsoft Server Gated Cryptography (veraltet)                  |
 +| **nsSGC**               | Netscape Server Gated Cryptography (veraltet)                   |
 +| **ipsecEndSystem**      | IPsec-Schlüssel für Endsystem (IKE)                             |
 +| **ipsecTunnel**         | IPsec-Schlüssel für Tunnelmodus                                 |
 +| **ipsecUser**           | IPsec-Schlüssel für Benutzer                                    |
 +| **anyExtendedKeyUsage** | Beliebiger Zweck erlaubt (kommt selten vor, unscharf)           |
 +| **smartcardLogon**      | Authentifizierung via Smartcard                                 |
 +| **documentSigning**     | Signieren von Dokumenten                                        |
 +| **secureEmail**         | Alternative Bezeichnung für emailProtection (RFC 5280)          |
 +
 +
 +===Beispiele===
 +
 +Webserver-Zertifikat (TLS/SSL):
 +
 +<code>
 +keyUsage = digitalSignature, keyEncipherment
 +</code>
 +
 +CA-Zertifikat:
 +
 +<code>
 +keyUsage = keyCertSign, cRLSign
 +</code>
 +
 +Code Signing:
 +
 +<code>
 +keyUsage = digitalSignature
 +</code>
 +
 +====CSR====
 +
 +Einen CSR (Certificate signing request) erstellen.
 +===OpenSSL Konfig===
 +
 +==Webserver==
 +<code>
 +[ req ]
 +default_bits        = 4096
 +prompt              = no
 +default_md          = sha256
 +distinguished_name  = dn
 +req_extensions      = req_ext
 +
 +[ dn ]
 +CN = www.zarat.at
 +O = Zarat
 +C = AT
 +
 +[ req_ext ]
 +keyUsage = critical, digitalSignature, keyEncipherment
 +extendedKeyUsage = serverAuth
 +subjectAltName = @alt_names
 +
 +[ alt_names ]
 +DNS.1 = www.zarat.at
 +DNS.2 = zarat.at
 +</code>
 +
 +==DocumentSigning==
 +
 +<code>
 +[ req ]
 +default_bits        = 4096
 +prompt              = no
 +default_md          = sha256
 +distinguished_name  = dn
 +req_extensions      = req_ext
 +
 +[ dn ]
 +CN = Zarat Signatur
 +O = Zarat
 +C = AT
 +
 +[ req_ext ]
 +keyUsage = critical, digitalSignature
 +extendedKeyUsage = codeSigning
 +subjectAltName = @alt_names
 +
 +[ alt_names ]
 +DNS.1 = zarat.at
 +</code>
 +
 +CSR generieren.
 +<code bash>
 +openssl req -new -key private.key -out signing.csr -config openssl-csr.cnf
 +</code>
 +
 +Diesen CSR sendet man an die CA.
 =====CA erstellen===== =====CA erstellen=====
  
 +ROOT-CA Config
 <code> <code>
-## CA key und ca erstellen +[req
-openssl req -newkey rsa:2048 -nodes -keyform PEM -keyout apitest01-ca.key -x509 -days 3650 -outform PEM -out apitest01-ca.crt +default_bits = 2048 
 +prompt = no 
 +default_md = sha256 
 +distinguished_name = dn
  
-## intermediate key erzeugen +[dn] 
-openssl genrsa -out apitest01.key 2048 +C = AT 
 +ST = Vienna 
 +L = Vienna 
 +O = Root Authority 
 +OU = Root CA 
 +CN = root-ca.local 
 +</code>
  
-## intermediate CSR erzeugen +INTERMEDIATE-CA Config
-openssl req -new -key apitest01.key -out apitest01.csr+
  
-## intermediate mit CA signieren +<code> 
-openssl x509 -req -in apitest01.csr -CA apitest01-ca.crt -CAkey apitest01-ca.key -set_serial 100 -days 365 -outform PEM -out apitest01.crt +[req
 +default_bits = 2048 
 +prompt = no 
 +default_md = sha256 
 +distinguished_name = dn
  
-## client key erzeugen +[dn] 
-openssl genrsa -out apitest01-client.key 2048+C = AT 
 +ST = Vienna 
 +L = Vienna 
 +O = Brainworx 
 +OU = Intermediate CA 
 +CN = intermediate-ca.local 
 +</code>
  
-## client CSR erzeugen +CLIENT Config
-openssl req -new -key apitest01-client.key -out apitest01-client.csr +
  
-## client cert signieren +<code> 
-openssl x509 -req -in apitest01-client.csr -CA apitest01-ca.crt -CAkey apitest01-ca.key -set_serial 101 -days 365 -outform PEM -out apitest01-client.crt +[req
 +default_bits = 2048 
 +prompt = no 
 +default_md = sha256 
 +distinguished_name = dn
  
-## copy ca cert to pki for apache config (set this into the apache config) +[dn] 
-cp apitest01-ca.crt /etc/pki/tls/apitest01-ca.crt+C = AT 
 +ST = Vienna 
 +L = Vienna 
 +O = Brainworx 
 +OU = Cloud Services 
 +CN = nextcloud.local 
 +</code>
  
-## bundle client cert and key into .p12 file+<code> 
 +@echo off 
 + 
 +@rem Root CA Key und selbst-signiertes Zertifikat erstellen 
 +openssl req -newkey rsa:2048 -nodes -keyout apitest01-ca.key -x509 -days 3650 -out apitest01-ca.crt -config root-openssl.cnf 
 +pause 
 + 
 +@rem Intermediate CA Key erzeugen 
 +openssl genrsa -out apitest01-intermediate.key 2048 
 +pause 
 + 
 +@rem Intermediate CA CSR erzeugen 
 +openssl req -new -key apitest01-intermediate.key -out apitest01-intermediate.csr -config intermediate-openssl.cnf 
 +pause 
 + 
 +@rem Intermediate CA mit Root CA signieren 
 +openssl x509 -req -in apitest01-intermediate.csr -CA apitest01-ca.crt -CAkey apitest01-ca.key -set_serial 100 -days 3650 -out apitest01-intermediate.crt 
 +pause 
 + 
 +@rem Client Key erzeugen 
 +openssl genrsa -out apitest01-client.key 2048 
 +pause 
 + 
 +@rem Client CSR erzeugen 
 +openssl req -new -key apitest01-client.key -out apitest01-client.csr -config client-openssl.cnf 
 +pause 
 + 
 +@rem Client Zertifikat mit Intermediate CA signieren 
 +openssl x509 -req -in apitest01-client.csr -CA apitest01-intermediate.crt -CAkey apitest01-intermediate.key -set_serial 101 -days 365 -out apitest01-client.crt 
 +pause 
 + 
 +@rem --- Client Zertifikat und Schlüssel in .p12 Datei exportieren --- 
 +@rem Bündle Client Zertifikat und Schlüssel in eine PKCS#12 Datei
 openssl pkcs12 -export -inkey apitest01-client.key -in apitest01-client.crt -out apitest01-client.p12 openssl pkcs12 -export -inkey apitest01-client.key -in apitest01-client.crt -out apitest01-client.p12
 +pause
 </code> </code>
 +
 +=====Links=====
 +
 +  * [[https://docs.openssl.org/3.4/man1/openssl/#standard-commands|Docs]]
openssl.1728891134.txt.gz · Zuletzt geändert: 2024/10/14 09:32 von jango