Zertifikate erstellen (OpenSSL): Unterschied zwischen den Versionen

Aus MattWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Dieser Artikel beschäftigt sich damit, wie OpenSSL Schlüssel und Zertifikate erstellt werden können, die durch eine eigene, selbst signierte Zertifizierungsstelle, signiert werden.  
Dieser Artikel beschäftigt sich damit, wie mit OpenSSL Schlüssel und Computer- oder Benutzer-Zertifikate erstellt werden können. Hierfür wird eine Zertifizierungsstelle benötigt.


Die Erstellung einer solchen Zertifizierungsstelle ist hier beschrieben: [[Zertifizierungsstelle einrichten (OpenSSL)]]
Die Erstellung einer solchen, selbst signierten Zertifizierungsstelle, ist beschrieben in: [[Zertifizierungsstelle einrichten (OpenSSL)]]  
 
Das Grundsätzliche Vorgehen zur Erstellung von Zertifikaten wird hier beschrieben: [[Grundlagen der PKI]]
 
Einsatzmöglichkeiten:
* Serververbindungen mit TLS absichern (Computerzertifikate) 
* Clients für den Zugriff auf Server mit Zertifikat authentifizieren.


==Computer-Zertifikat erstellen==
==Computer-Zertifikat erstellen==
=== Privaten Schlüssel erstellen ===
Privaten Schlüssel "cert.key" mit Schlüssellänge 2048 Byte erstellen:
Privaten Schlüssel "cert.key" mit Schlüssellänge 2048 Byte erstellen:
  openssl genrsa -out cert.key 2048
cd /dir-to-ca/
Für Server-Zertifikate ist es bei der Beantwortung der Fragen notwendig, als Common Name den Hostnamen des Servers einzugeben. Als Anhaltspunkt kann der Name verwendet werden, der im Browser für den Zugriff auf den Server verwendet wird. Dies kann der Servername im lokalen Netzwerk, der Full Qualified Domain Name (FQDN) oder die IP-Adresse des Servers sein.
  openssl genrsa -out private/computer.key.pem 2048  
chmod 400 private/computer.key.pem
Wenn der Schlüssel für einen Webserver verwendet werden soll, dann empfiehlt es sich, auf den Parameter <code>-aes256</code> zu verzichten, da sonst bei einem Serverneustart das Passwort abgefragt wird, und diese Frage üblicherweise kein User beantworten kann.


Zertifikatsanfrage (CSR = Certificate Signing Request) erstellen:
Es ist wichtig, als Common Name den Hostnamen des Servers einzugeben. Als Anhaltspunkt kann der Name verwendet werden, der im Browser für den Zugriff auf den Server verwendet wird. Dies kann der Servername im lokalen Netzwerk, der Full Qualified Domain Name (FQDN) oder die IP-Adresse des Servers sein.
openssl req -new -key cert.key -out cert.csr -sha256  
 
=== Subject Alternative Name setzen ===
Für den Einsatz eines Computerzertifikats um TLS Verbindungen in einem Webserver, z. B. Apache Webserver, abzusichern wird in dem Zertifikat ein Subject Alternative Name (SAN) benötigt.
 
Vgl. https://en.wikipedia.org/wiki/Subject_Alternative_Name
 
Der Subject Alternative Name wird vom Client zuerst ausgelesen, und erst im Anschluss wird der Common Name (CN) verwendet. Vgl. https://tools.ietf.org/html/rfc5280#section-4.2.1.6
 
Dieser muss in der OpenSSL-Konfigurationsdatei angegeben werden. Durch die Spezifikation in der Konfigurationsdatei ist die Angabe also statisch. Dies sieht üblicherweise folgendermaßen aus:
 
[req]
req_extensions = v3_req
[ v3_req ] 
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
  subjectAltName = @alt_names
   
   
  [[Kategorie:Kryptographie]]
  [alt_names]
DNS.1 = server1.example.com
DNS.2 = mail.example.com
DNS.3 = www.example.com
DNS.4 = www.sub.example.com
DNS.5 = mx.example.com
DNS.6 = support.example.com
 
Es ist jedoch möglich, eine eigene Konfigurationsdatei für Zertifikate mit SAN zu erstellen. Diese kann bei der Erstellung der Zertifikate als Parameter spezifiziert werden: <code>-config cert.cnf</code>
 
Alternativ kann als SAN auf die Umgebungsvariablen verwiesen werden:
 
[ v3_req ]  
   
   
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=$ENV::ALTNAME
In diesem Falle wird der SAN aus der Umgebungsvariable ENV geholt. Diese muss vor dem Signieren des Zertifikats gesetzt werden:
export ALTNAME=DNS:example.com,DNS:other.example.net
Damit beim Signieren des Zertifikats der <code>[ v3_req ]</code> aus der OpenSSL-Konfigurationsdatei verarbeitet wird, muss dies per Parameter hinzugefügt werden: <code>-extensions v3_req</code>
=== Zertifizierungsanfrage erstellen ===
Zertifikatsanfrage (CSR = Certificate Signing Request) erstellen:
openssl req -new -key private/computer.key.pem -out csr/computer.csr.pem
=== Zertifikat signieren ===
Ein Zertifikat kann mit der minimal CA application "ca" erstellt werden:
openssl ca -in csr/computer.csr.pem -out certs/computer.cert.pem -notext
Optional kann mit <code>-md sha512</code> eine andere Message Digest Funktion verwendet werden.
Damit der Subject Alternative Name im signierten Zertifikat eingefügt wird, muss beim Signieren der Parameter <code>-extensions v3_req</code> verwendet werden. Damit wird der Abschnitt <code>[ v3_req ]</code> aus der OpenSSL-Konfigurationsdatei verarbeitet:
openssl ca -in csr/computer.csr.pem -out certs/computer.cert.pem -notext -extensions v3_req
Alternativ kann es auch mit mit dem Mehrzweck-Zertifikatwerkzeug "X509" erstellt werden (ungetestet):
openssl x509 -req -in zertifikat.csr -CA ca-root.pem -CAkey ca-key.pem -CAcreateserial -out zertifikat-pub.pem -days 365 -sha512
Zugriffsrechte anpassen:
chmod 444 certs/computer.cert.pem
=== Zertifikat überprüfen ===
Beim erstellten Zertifikat sollten folgende Informationen überprüft werden:
* Signature Algorithm
* Validity Not Before und Not After
* Public Key Algorithm und Länge des Public Key
* Issuer
* Subject
* X509v3 Extensions (v3_ca)
Diese können folgendermaßen ausgegeben werden:
openssl x509 -in certs/computer.cert.pem -noout -text
== Zertifizierungsstellenzertifikat an Zertifikat anhängen ==
Es kann notwendig sein, dass dem Computer- oder Benutzerzertifikat die Zertifizierungskette angehängt wird, z. B. wenn es eine Zwischen-Zertifizierungsstelle gibt.
In diesem Fall wird das Zertifikat der Zwischen-Zertifizierungsstelle oder der Stamm-Zertifizierungsstelle an das erstellte Computer- oder Benutzerzertifikat angehängt:
cat cacert.pem >> certs/computer.cert.pem
[[Kategorie:Kryptographie]]
  [[Kategorie:Terminal]]
  [[Kategorie:Terminal]]
[[Kategorie:OpenSSL]]
[[Kategorie:OpenSSL]]

Aktuelle Version vom 2. September 2017, 12:48 Uhr

Dieser Artikel beschäftigt sich damit, wie mit OpenSSL Schlüssel und Computer- oder Benutzer-Zertifikate erstellt werden können. Hierfür wird eine Zertifizierungsstelle benötigt.

Die Erstellung einer solchen, selbst signierten Zertifizierungsstelle, ist beschrieben in: Zertifizierungsstelle einrichten (OpenSSL)

Das Grundsätzliche Vorgehen zur Erstellung von Zertifikaten wird hier beschrieben: Grundlagen der PKI

Einsatzmöglichkeiten:

  • Serververbindungen mit TLS absichern (Computerzertifikate)
  • Clients für den Zugriff auf Server mit Zertifikat authentifizieren.

Computer-Zertifikat erstellen

Privaten Schlüssel erstellen

Privaten Schlüssel "cert.key" mit Schlüssellänge 2048 Byte erstellen:

cd /dir-to-ca/
openssl genrsa -out private/computer.key.pem 2048 
chmod 400 private/computer.key.pem

Wenn der Schlüssel für einen Webserver verwendet werden soll, dann empfiehlt es sich, auf den Parameter -aes256 zu verzichten, da sonst bei einem Serverneustart das Passwort abgefragt wird, und diese Frage üblicherweise kein User beantworten kann.

Es ist wichtig, als Common Name den Hostnamen des Servers einzugeben. Als Anhaltspunkt kann der Name verwendet werden, der im Browser für den Zugriff auf den Server verwendet wird. Dies kann der Servername im lokalen Netzwerk, der Full Qualified Domain Name (FQDN) oder die IP-Adresse des Servers sein.

Subject Alternative Name setzen

Für den Einsatz eines Computerzertifikats um TLS Verbindungen in einem Webserver, z. B. Apache Webserver, abzusichern wird in dem Zertifikat ein Subject Alternative Name (SAN) benötigt.

Vgl. https://en.wikipedia.org/wiki/Subject_Alternative_Name

Der Subject Alternative Name wird vom Client zuerst ausgelesen, und erst im Anschluss wird der Common Name (CN) verwendet. Vgl. https://tools.ietf.org/html/rfc5280#section-4.2.1.6

Dieser muss in der OpenSSL-Konfigurationsdatei angegeben werden. Durch die Spezifikation in der Konfigurationsdatei ist die Angabe also statisch. Dies sieht üblicherweise folgendermaßen aus:

[req]
req_extensions = v3_req

[ v3_req ]  

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = server1.example.com
DNS.2 = mail.example.com
DNS.3 = www.example.com
DNS.4 = www.sub.example.com
DNS.5 = mx.example.com
DNS.6 = support.example.com

Es ist jedoch möglich, eine eigene Konfigurationsdatei für Zertifikate mit SAN zu erstellen. Diese kann bei der Erstellung der Zertifikate als Parameter spezifiziert werden: -config cert.cnf

Alternativ kann als SAN auf die Umgebungsvariablen verwiesen werden:

[ v3_req ] 

# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=$ENV::ALTNAME

In diesem Falle wird der SAN aus der Umgebungsvariable ENV geholt. Diese muss vor dem Signieren des Zertifikats gesetzt werden:

export ALTNAME=DNS:example.com,DNS:other.example.net

Damit beim Signieren des Zertifikats der [ v3_req ] aus der OpenSSL-Konfigurationsdatei verarbeitet wird, muss dies per Parameter hinzugefügt werden: -extensions v3_req

Zertifizierungsanfrage erstellen

Zertifikatsanfrage (CSR = Certificate Signing Request) erstellen:

openssl req -new -key private/computer.key.pem -out csr/computer.csr.pem

Zertifikat signieren

Ein Zertifikat kann mit der minimal CA application "ca" erstellt werden:

openssl ca -in csr/computer.csr.pem -out certs/computer.cert.pem -notext

Optional kann mit -md sha512 eine andere Message Digest Funktion verwendet werden.

Damit der Subject Alternative Name im signierten Zertifikat eingefügt wird, muss beim Signieren der Parameter -extensions v3_req verwendet werden. Damit wird der Abschnitt [ v3_req ] aus der OpenSSL-Konfigurationsdatei verarbeitet:

openssl ca -in csr/computer.csr.pem -out certs/computer.cert.pem -notext -extensions v3_req

Alternativ kann es auch mit mit dem Mehrzweck-Zertifikatwerkzeug "X509" erstellt werden (ungetestet):

openssl x509 -req -in zertifikat.csr -CA ca-root.pem -CAkey ca-key.pem -CAcreateserial -out zertifikat-pub.pem -days 365 -sha512

Zugriffsrechte anpassen:

chmod 444 certs/computer.cert.pem

Zertifikat überprüfen

Beim erstellten Zertifikat sollten folgende Informationen überprüft werden:

  • Signature Algorithm
  • Validity Not Before und Not After
  • Public Key Algorithm und Länge des Public Key
  • Issuer
  • Subject
  • X509v3 Extensions (v3_ca)

Diese können folgendermaßen ausgegeben werden:

openssl x509 -in certs/computer.cert.pem -noout -text 

Zertifizierungsstellenzertifikat an Zertifikat anhängen

Es kann notwendig sein, dass dem Computer- oder Benutzerzertifikat die Zertifizierungskette angehängt wird, z. B. wenn es eine Zwischen-Zertifizierungsstelle gibt.

In diesem Fall wird das Zertifikat der Zwischen-Zertifizierungsstelle oder der Stamm-Zertifizierungsstelle an das erstellte Computer- oder Benutzerzertifikat angehängt:

cat cacert.pem >> certs/computer.cert.pem