9Zertifikate erstellen und verwalten
Es wird davon ausgegangen, dass der Leser über umfassende Kenntnisse über Zertifikate und Zertifikatserstellung sowie Verschlüsselung öffentlicher Schlüssel verfügt.
Erstellen Sie nur Zertifikate, wenn Sie die Zertifikatserstellung sicher beherrschen. |
In diesem Kapitel wird die Erstellung von Zertifikaten mit OpenSSL beschrieben.
Wichtiger Hinweis: mdm erfordert zwei verschiedene Arten von Zertifikaten und Schlüsseln:
–Zertifikate und Schlüssel zur Sicherung der Kommunikation zwischen mdm Komponenten
–Zertifikate und Schlüssel für die PKI
Die Erstellung von Zertifikaten und Schlüsseln für die SSL-Kommunikation wird in Kapitel 9.1 beschrieben. Die in einer PKI verwendeten Zertifikate und Schlüssel werden in Kapitel 9.2 beschrieben.
Hinweis: Der in diesem Abschnitt beschriebene Prozess zur Erstellung von Zertifikaten stellt lediglich ein Beispiel für die Verwendung von OpenSSL dar. Sie können Ihre Zertifikate auch auf andere Art erstellen. Wenn Sie mit OpenSSL nicht vertraut sind, sollten sie die nachfolgende Anleitung genau befolgen. |
Aufgrund verschiedener wichtiger Sicherheits-Fixes wird die Verwendung von OpenSSL ab Version 1.1.1b empfohlen. |
Schlüsselspeicher
Zertifikate und Schlüssel werden in speziellen Datenbanken gespeichert, den sogenannten Schlüsselspeichern. Ein Schlüsselspeicher ist eine Datei, die kodierte Zertifikate und Schlüssel enthält. Für den Zugriff auf die Informationen in einem Schlüsselspeicher ist ein Passphrase erforderlich. Schlüsselspeicher können verschiedene Formate aufweisen, üblich sind beispielsweise PKCS#12 oder das proprietäre Format Java KeyStore (JKS). Der Kodierungsalgorithmus kann normalerweise beim Anlegen des Schlüsselspeichers ausgewählt werden. Empfohlen wird AES256.
Die OpenSSL-Konfigurationsdatei
OpenSSL verwendet Standardwerte, die in der Konfigurationsdatei openssl.cnf angegeben sind (in welchem Verzeichnis sich diese Datei befindet, hängt von Ihrer Verteilung ab, prüfen Sie beispielsweise das Verzeichnis /usr/ssl oder /usr/lib/ssl).
Wenn Sie obligatorische Argumente eines Befehls auslassen, verwendet OpenSSL die in der Konfigurationsdatei definierten Standardeinstellungen. Nach Möglichkeit sind alle obligatorischen Argumente in den nachfolgenden Beispielbefehlen explizit angegeben, wenn Sie beispielsweise die Befehle wie nachfolgend beschrieben verwenden, werden die wichtigen Informationen der Kommandozeile und nicht der Konfigurationsdatei entnommen. Wenn die Konfigurationsdatei für den jeweiligen Befehl benötigt wird, ist dies im Text ausdrücklich angeführt.
Weitere Informationen über Syntax und Inhalt der Konfigurationsdateien finden Sie in der Dokumentation von OpenSSL, vor allem im Handbuch auf den Seiten genrsa(1ssl), req(1ssl), ca(1ssl) und openssl(1ssl).
9.1Zertifikate und Schlüssel für SSL
Für die Einrichtung einer sicheren Verbindung zwischen Entitäten (z. B. ET1, ET2) werden normalerweise folgende Komponenten benötigt:
–ein privater Schlüssel für jede an der Kommunikation beteiligte Entität:
–ET1key
–ET2key
Der Begriff privater Schlüssel weist bereits darauf hin, dass diese Schlüssel vertraulich behandelt und an einem Ort abgelegt werden sollten, auf den nur der Administrator zugreifen kann.
–und die entsprechenden Zertifikate:
–ET1cert
–ET2cert
Die Zertifikate enthalten unter anderem folgende Informationen
–den öffentlichen Schlüssel der Entität
–Informationen über die Entität, beispielsweise Name und/oder IP-Adresse
–weitere Informationen zum Zertifikat, z. B. beabsichtigte Verwendung
Das Zertifikat ist digital entweder mit dem privaten Schlüssel der jeweiligen Entität (selbstsigniert) oder mit einem CA-Schlüssel signiert.
Die Zertifikate sind öffentlich und können durch jeden Teilnehmer an der Kommunikation verteilt werden.
ET1 verwendet den in ET2cert enthaltenen öffentlichen Schlüssel, um die an ET2 übermittelten Daten zu verschlüsseln. Damit ist gewährleistet, dass nur ET2 die Daten entschlüsseln kann. Wenn ET2cert selbstsigniert ist, dann ist gewährleistet, dass der in ET2cert enthaltene öffentliche Schlüssel ET2key entspricht. Wird ET2cert durch eine CA signiert, dann ist gewährleistet, dass der in ET2cert enthaltene öffentliche Schlüssel tatsächlich zu ET2 gehört (Authentifizierung).
Privaten Schlüssel erstellen
Zuerst ist mit dem folgendem Befehl ETkey zu erstellen:
openssl genrsa -aes256 -passout pass:yourSSLPW -out privkey.pem 2048
Erläuterung der Argumente
Argument |
Erläuterung |
---|---|
genrsa |
genrsa weist OpenSSL an, einen RSA-Schlüssel zu erstellen. |
-aes256 |
Zum Kodieren des Schlüssels AES256 verwenden. |
-passout pass:password |
Das zum Kodieren des privaten Schlüssels (im Beispiel: yourSSLPW) verwendete Passwort yourSSLPW ist lediglich ein Beispiel und sollte durch ein sicheres Passwort ersetzt werden. |
-out filename |
Name der Datei, die den ETkey enthält (im Beispiel: privkey.pem). |
2048 |
Die Länge des Schlüssels. |
:
Mit dem Befehl oben wird die Ausgabedatei erstellt:
–privkey.pem
Diese Datei enthält den ETkey im PEM-Format. Der Schlüssel wird mit dem AES256-Algorithmus kodiert. Für den Zugriff auf den Schlüssel müssen Sie die oben angegebene Passphrase kennen (im Beispiel: yourSSLPW). Verwenden Sie zum Kodieren des privaten Schlüssels ein eigenes sicheres Passwort.
Manchmal ist die Erstellung eines nicht kodierten Schlüssels notwendig. Lassen Sie in diesem Fall die Optionen -aes256 und -passout im Befehl oben einfach aus. |
Zertifikat erstellen
Das Zertifikat wird mit folgendem Befehl erstellt:
openssl req -batch -new -x509 -key privkey.pem -keyform PEM
-passin pass:yourSSLPW -sha256 -outform PEM -out serverCert.pem
Erläuterung der Argumente:
Argument |
Erläuterung |
---|---|
req |
req weist OpenSSL an, eine Anforderung (Standard) für ein Zertifikat zu erstellen. |
-batch |
Kein interaktiver Modus. |
-new |
Neue Anfrage oder neues Zertifikat erstellen. |
-x509 |
Selbstsigniertes Zertifikat statt einer Zertifikatanfrage erstellen. |
-key filename |
Der entsprechende private Schlüssel (im Beispiel: privkey.pem). |
-keyform PEM |
Der private Schlüssel weist das Format PEM auf. |
-passin pass:password |
Das für die Kodierung des privaten Schlüssels benötigte Passwort (im Beispiel: yourSSLPW). |
-sha256 |
Mit dem Algorithmus SHA256 können Sie das Message Digest für die Signatur erstellen (empfohlen). |
-outform PEM |
Das Format der Ausgabedatei ist PEM. |
-out filename |
Der Name der Ausgabedatei, also das Zertifikat (im Beispiel serverCert.pem). |
Mit dem Befehl oben wird die Ausgabedatei erstellt:
–serverCert.pem
Diese Datei enthält das selbstsignierte Zertifikat ETcert.
Die Schlüssel und Zertifikate müssen in den Schlüsselspeichern enthalten sein. Das Installationsarchiv mdm-ca-1.11.x.zip enthält das (proprietäre) Java-Tool ImportKey im Verzeichnis demoCA, das für das Anlegen und Verwalten von Schlüsselspeichern verwendet werden kann. Kopieren Sie die Datei ImportKey.class in Ihr Arbeitsverzeichnis.
Zuerst muss ETkey in das Format PKCS#8 umgewandelt und sowohl ETkey als auch ETcert in den Schlüsselspeicher übernommen werden. In diesem Beispiel wird das Java KeyStore Format JKS verwendet. Dies kann mit dem Tool ImportKey abgeschlossen werden. ImportKey akzeptiert nur den (nicht kodierten) Schlüssel am Standardeingang, daher kann die Ausgabe des Befehls pkcs8 wie folgt weitergereicht werden:
openssl pkcs8 -topk8 -in privkey.pem -passin pass:yourSSLPW
-inform PEM -nocrypt -outform DER |java -cp . ImportKey
-alias yourAlias -storetype JKS -keystore serverKeystore.jks
-storepass pass:yourSSLPW -keypass pass:yourSSLPW
-chain serverCert.pem
Erläuterung der openssl-Argumente:
Argument |
Erläuterung |
---|---|
pkcs8 |
Mit dem Befehl pkcs8 werden private Schlüssel im Format PKCS#8 verarbeitet. |
-topk8 |
Privaten Schlüssel im traditionellen Format verwenden und Schlüssel im Format PKCS#8 schreiben. |
-in filename |
Name und Speicherort der Eingabedatei (im Beispiel: privkey.pem). |
-passin pass:password |
Das für die Dekodierung der Eingabe benötigte Passwort (im Beispiel: yourSSLPW). |
-inform PEM |
Das Eingabeformat des Schlüssels ist PEM. |
-nocrypt |
Die Ausgabe (der Schlüssel) ist nicht kodiert. |
-outform DER |
Das Ausgabeformat ist DER. |
Erläuterung der ImportKey-Argumente:
Argument |
Erläuterung |
---|---|
-alias name |
Ein Schlüsselspeicher kann mehrere Einträge enthalten. Der Alias kennzeichnet den Eintrag und darf daher im Schlüsselspeicher nur einmal vorkommen. Aliases sind unabhängig von Groß- und Kleinschreibung. |
-keystore filename |
Die Datei, die den Schlüsselspeicher enthält (im Beispiel: serverKeyStore.jks). |
-storetype JKS |
Verwenden Sie für den Schlüsselspeicher das Format JKS. |
-storepass pass:password |
Das für die Dekodierung der Inhalte des Schlüsselspeichers benötigte Passwort (im Beispiel: yourSSLPW). |
-keypass pass:password |
Zusätzliches Passwort für die Dekodierung des privaten Schlüssels im Schlüsselspeicher. |
-chain filename |
Das Zertifikat (im Beispiel serverCert.pem). |
Mit dem Befehl oben wird die Ausgabedatei erstellt:
–serverKeyStore.jks
Dies ist der Schlüsselspeicher, der das Zertifikat und den privaten Schlüssel enthält.
Nach Anlegen des Schlüsselspeichers müssen zuweilen zusätzliche Zertifikate in den Schlüsselspeicher importiert werden. Dies kann mit dem folgenden Befehl erfolgen:
java -cp . ImportKey -alias yourAlias -storetype JKS
-file additionalCertificate.pem -storepass pass:yourSSLPW
-keystore serverKeystore.jks
Erläuterung der ImportKey-Argumente:
Argument |
Erläuterung |
---|---|
-alias name |
Ein Schlüsselspeicher kann mehrere Einträge enthalten. Der Alias kennzeichnet den Eintrag und darf daher im Schlüsselspeicher nur einmal vorkommen. Aliases sind unabhängig von Groß- und Kleinschreibung. |
-keystore filename |
Die Datei, die den Schlüsselspeicher enthält (im Beispiel: serverKeyStore.jks). |
-storetype JKS |
Das Format des Schlüsselspeichers. |
-storepass pass:password |
Das für die Dekodierung der Inhalte des Schlüsselspeichers benötigte Passwort (im Beispiel: yourSSLPW). |
-file filename |
Das zu importierende Zertifikat (im Beispiel serverCert.pem). |
9.2Zertifikate und Schlüssel für eine PKI
Beim Ausrollen einer Private Key Infrastructure (PKI), das generell bei Verwendung des mdm CA beabsichtigt ist, sind zusätzlich zu den im vorherigen Abschnitt erwähnten Punkten weitere Voraussetzungen zu berücksichtigen. In diesem Kapitel werden zunächst die Grundlagen der PKI und anschließend die Verwendung von OpenSSL zum Ausrollen einer PKI erläutert.
Hinweis: Die in diesem Abschnitt beschriebenen Zertifikate werden nicht für SSL verwendet. |
Hinweis: Die in diesem Abschnitt beschriebenen Zertifikate und Schlüssel werden nicht im SSL-Schlüsselspeicher des mdm CDA, sondern im CDA-Schlüsselspeicher abgelegt. |
Grundlagen PKI
Gründe für die Verwendung einer PKI können unter anderem sein:
–Authentifizierung
Bei der Kommunikation über Datennetzwerke kann die Entität auf der anderen Seite meist nicht „gesehen“ werden (Ausnahme: Videotelefonie), d. h. es besteht keine Sicherheit darüber, dass die Entität auf der anderen Seite auch wirklich die ist, die sie zu sein vorgibt. Durch die Verwendung einer PKI ist die Authentizität der miteinander kommunizierenden Entitäten gewährleistet.
–Vertraulichkeit der Daten
Aus diesem Grund werden Daten mittels VPN ausgetauscht: Die Datenpakete werden „in der Öffentlichkeit“ (Internet) verschickt, aber nicht befugte Entitäten erhalten keinen Zugriff auf die in den Paketen enthaltenen Informationen.
–Integrität der Daten
Die Sicherheit, dass die empfangenen Informationen den durch die andere Entität übermittelten Informationen entsprechen. Auf diese Weise wird verhindert, dass die Informationen durch eine nicht teilnahmeberechtigte Entität „in der Mitte“ geändert werden.
Die Beschreibung aller für eine komplette PKI notwendigen Komponenten und Interaktionen würde den Rahmen des vorliegenden Dokuments sprengen, daher sollen hier nur die wichtigsten genannt werden:
–Zertifikate und private Schlüssel
Zertifikate sind ein Mittel einer PKI, um die Authentifizierung zu gewährleisten. Die Identität eines Zertifikatsinhabers wird durch eine CA anerkannt, die die Zertifikatanforderung des jeweiligen Inhabers signiert. Die Kodierung/Dekodierung der Daten erfolgt über öffentliche und private Schlüssel, sodass die Vertraulichkeit der Daten gewährleistet ist.
–Zertifizierungsstelle (CA)
Eine Zertifizierungsstelle ist eine Komponente in einer PKI, die die Authentizität der teilnehmenden Entitäten durch Signieren von Zertifikatanfragen (d. h. die Ausstellung von Zertifikaten) gewährleistet. Normalerweise sind in einer PKI mehrere CAs in einer hierarchischen Struktur mit einer Root-CA an der Spitze organisiert.
–CRL Distribution Points (CDP)
Siehe folgenden Abschnitt Zertifikaterweiterungen.
–Miteinander kommunizierende Entitäten
Die Entitäten, die PKI verwenden, authentifizieren sich mit Zertifikaten und verwenden zum Kodieren/Dekodieren der ausgetauschten Daten den öffentlichen/privaten Schlüssel. Die Entitäten fordern die Zertifikate von der CA an. Normalerweise gehört auch eine Registration Authority (RA) zu einer PKI. Die RA ist für die erstmalige Registrierung von Entitäten zuständig, die die PKI verwenden möchten. Im mdm Verwendungs-Szenario ist keine RA notwendig.
Inhalte eines Zertifikats
Wie im vorherigen Kapitel erwähnt, enthält ein Zertifikat folgende Informationen:
–den öffentlichen Schlüssel der Entität
–Informationen über die Entität, beispielsweise Name und/oder IP-Adresse
–weitere Informationen z. B. zum Zertifikat und der Infrastruktur
In den folgenden Kapiteln werden die Inhalte genauer beschrieben.
Der Subject Distinguished Name
Der Subject Distinguished Name ist eine eindeutige Benennung des Zertifikats und dessen Inhaber. Er besteht aus mehreren Komponenten:
Abkürzung |
Name |
Erläuterung |
---|---|---|
CN |
Common Name |
Identifiziert die Person oder das Objekt, zu der/dem das Zertifikat gehört. Beispielsweise: CN=server1 |
E |
E-mail Address |
Gibt die E-Mail-Adresse des Inhabers an. |
OU |
Organizational Unit |
Kennzeichnet eine Einheit innerhalb des Unternehmens. Beispielsweise: OU=Research&Development |
O |
Organization |
Kennzeichnet das Unternehmen. Beispielsweise: O=Innominate |
L |
Locality |
Kennzeichnet den Ort, an dem die Entität sitzt. Der Ort kann eine Stadt sein: L=Berlin |
ST |
State |
Kennzeichnet das Bundesland. Beispielsweise: ST=Berlin |
C |
Country |
Code bestehend aus zwei Buchstaben, die das Land angeben. Beispielsweise: C=DE (Deutschland) |
Entsprechend unseren Richtlinien sind nicht alle Komponenten obligatorisch, aber wenn die Erweiterung Subject Alternative Name nicht im Zertifikat enthalten ist, muss mindestens eine Komponente, die als Kennzeichnung dienen kann, angegeben werden. Dies ist normalerweise der Common Name (CN). Hinweis: die mdm CA kann aktuell Zertifikate mit der Erweiterung Subject Alternative Name nicht verarbeiten.
Zertifikaterweiterungen
In den sogenannten Erweiterungen oder Extensions sind Informationen über das Zertifikat oder die Infrastruktur enthalten. Im Grunde genommen kann jeder seine eigenen Erweiterungen festlegen, aber Standarderweiterungen (X.509version3) sind in RFC 3280 Internet X.509 Public Key Infrastructure - Certificate and CRL Profile definiert. Nachfolgend sind die für die mdm CA wichtigen Erweiterungen kurz beschrieben:
–Critical Bit
Das Critical Bit ist keine Erweiterung, sondern wird verwendet, um die Verwendung von Erweiterungen im Zertifikat zu erzwingen. Das Critical Bit kann für jede Erweiterung im Zertifikat gesetzt werden. Anwendungen, die ein Zertifikat überprüfen, müssen eine Erweiterung mit Critical Bit interpretieren können. Wenn die Anwendung die Erweiterung nicht interpretieren kann, muss das Zertifikat zurückgewiesen werden.
–Basic Constraints
Mit der Erweiterung Basic Constraints wird angezeigt, ob es sich bei einem Zertifikat um ein CA-Zertifikat handelt oder nicht. Basic Constraints besteht aus zwei Feldern:
–Feld cA vom Typ BOOLEAN und
–Feld pathLenConstraint (optional) vom Typ INTEGER
Bei CA-Zertifikaten muss das Feld cA auf true gesetzt sein. pathLenConstraint wird nur verwendet, wenn das Feld cA auf True gesetzt ist und die Nummer der zulässigen CA-Ebenen unter dem Zertifikat angibt. Basic Constraints sollte immer als kritisch gekennzeichnet sein.
Die Anforderungen hinsichtlich der Erweiterung Basis Constraints finden Sie in Kapitel 9.2.3.
–Key Usage
Key Usage kontrolliert die beabsichtigte Verwendung der Schlüssel eines Zertifikats. Ein Schlüssel kann verwendet werden, um Zertifikatssperrlisten (CRL) zu signieren, Daten zu verschlüsseln oder Zertifikate zu signieren.
Die Anforderungen hinsichtlich der Erweiterung Key Esage Constraints finden Sie in Kapitel 9.2.3.
–Subject Alternative Name
Mit der Erweiterung Subject Alternative Name können weitere Kennzeichen hinzugefügt werden. Subject Alternative Name kann zum Beispiel E-Mailadressen, Domainnamen usw. enthalten. Es kann auch als Ersatz für das Feld Subject verwendet werden, das in diesem Fall nicht frei bleiben darf. Hinweis: die mdm CA kann aktuell Zertifikate mit der Erweiterung Subject Alternative Name nicht verarbeiten.
–CRL Distribution Points (CDP)
Zertifikate können widerrufen werden, beispielsweise wenn ein privater Schlüssel beschädigt oder nicht mehr gültig ist. Normalerweise muss die Anwendung die Gültigkeit eines Zertifikats durch Kontrolle des Gültigkeitszeitraums und/oder durch Abholen des Widerrufs von einem CRL-Verteilungspunkt (CDP) überprüfen. Zum Abholen der Informationen kann entweder eine Certificate Revocation Lists (CRL) oder ein dezidiertes Protokoll wie OCSP verwendet werden. Das Zertifikat sollte jedoch Informationen dazu enthalten, welche CDP zu kontaktieren ist.
–Authority Information Access
Authority Information Access ist keine Standarderweiterung von X.509, sondern eine Erweiterung, die durch die Arbeitsgruppe PKIX definiert wurde (http://www.ietf.org/html.charters/pkix-charter.html). Authority Information Access enthält Informationen über die Ausgabe einer CA, beispielsweise Richtlinien, weitere Root-Zertifikate oder Informationen zum Abholen höherwertiger Zertifikate in der Kette, wenn nicht die gesamte Kette im Zertifikat enthalten ist.
Abhängig von den Einstellungen dieser Erweiterungen kann der Empfänger (nicht der Inhaber) eines Zertifikats die Kommunikation mit der Gegenstelle akzeptieren oder verweigern, sodass Missbrauch von Zertifikaten verhindert und eine höhere Sicherheitsstufe erreicht wird.
Abhängig von der vorhandenen Infrastruktur benötigt die mdm CA folgende Zertifikate:
–Ein selbstsigniertes Root-Zertifikat (CArootCert) mit dem passenden privaten Schlüssel (CArootKey).
Wenn Sie über ein weiteres vorgeschaltetes (Root-) CA verfügen, besteht keine Notwendigkeit zur Erstellung des Root-Zertifikats und des passenden privaten Schlüssels.
Das (selbstsignierte) Zertifikate wird an alle Entitäten verteilt, die an der Kommunikation teilnehmen. Es wird durch die Entitäten verwendet, um die Authentizität der Gegenstelle und jedweder zwischengeschalteter CAs in der Zertifikatskette zu überprüfen. Der private Schlüssel CArootKey wird zum Signieren des selbstsignierten Root-Zertifikats verwendet.
–Ein CA-Zertifikat (CAcert) mit dem passenden privaten Schlüssel (CAkey). Mit diesem Zertifikat authentifiziert sich die CA selbst gegenüber anderen Entitäten. Dieses Zertifikat muss mit dem privaten Root-Key signiert werden, d. h. entweder mit CArootKey oder mit dem Schlüssel Ihrer bestehenden Root-CA. Mit dem privaten Schlüssel CAkey wird die vom mdm-Server übermittelte Zertifikatanfrage signiert, d. h. damit werden Zertifikate für die mGuards ausgegeben.
–Ein Template-Zertifikat (CAtemplCert) das von der CA als Template bei der Ausgabe von End-Entitäts- (mGuard) Zertifikaten verwendet wird.
In Bild 9-1 ist die Zertifikathierarchie dargestellt:
Bild 9-1: mdm CA-Zertifikathierarchie
Im Folgenden wird angenommen, dass keine andere Root-CA vorhanden ist und dass die mdm CA als Root-CA verwendet wird.
Die folgenden OpenSSL-Befehle erfordern eine Eingabe von der OpenSSL-Konfigurationsdatei openssl.cnf (in welchem Verzeichnis sich diese Datei befindet, hängt von Ihrer Verteilung ab, prüfen Sie beispielsweise das Verzeichnis /usr/ssl oder /usr/lib/ssl). Anstatt einer Änderung der Standard-Konfigurationsdatei Ihrer OpenSSL-Installation wird empfohlen, die im mdm CA-Installationsarchiv mdm-ca-1.11.x.zip abgelegten Beispiel-Konfigurationsdateien zu verwenden und an die jeweiligen Anforderungen anzupassen. Sie können OpenSSL anweisen, anstelle der Standard-Konfigurationsdatei die zur Verfügung gestellten Konfigurationsdateien zu verwenden.
OpenSSL-Konfigurationsdatei anpassen
Kopieren Sie die Datei rootCert.conf, die im Installationsarchiv
mdm-ca-1.11.x.zip zur Verfügung steht, in Ihr Arbeitsverzeichnis. Passen Sie den Bereich [ root_dn ] der Datei, in dem der Subject Distinguished Name Ihres Root-CA-Zertifikats enthalten ist, an:
[ root_dn ]
C= DE
O= Innominate Security Technologies AG
OU= Research & Development
CN= Test Root CA
Beachten Sie auch den Bereich [ root_ext ] der Konfigurationsdatei, der wichtig für die korrekte Erstellung des Root-Zertifikats ist (eine Erläuterung dazu finden Sie in Abschnitt Certificate extensions):
[ root_ext ]
keyUsage= cRLSign, keyCertSign
basicConstraints= critical, CA:true, pathlen:1
Privaten Schlüssel erstellen
Mit dem folgenden Befehl ist zunächst CArootKey zu erstellen:
openssl genrsa -aes256 -passout pass:rootPW
-out rootKey.pem 2048
Erläuterung der Argumente:
Argument |
Erläuterung |
---|---|
genrsa |
genrsa weist OpenSSL an, einen RSA-Schlüssel zu erstellen. |
-aes256 |
Zum Kodieren des Schlüssels AES256 verwenden. |
-passout pass:password |
Das zum Kodieren des privaten Schlüssels (im Beispiel: rootPW) verwendete Passwort rootPW ist lediglich ein Beispiel und sollte durch ein sicheres Passwort ersetzt werden. |
-out filename |
Name der Datei, die den CArootKey enthält (im Beispiel: rootKey.pem). |
2048 |
Die Länge des Schlüssels. |
Mit dem Befehl oben wird die Ausgabedatei erstellt:
–rootKey.pem
Diese Datei enthält CArootKey im PEM format. Der Schlüssel wird mit dem AES256-Algorithmus kodiert. Für den Zugriff auf den Schlüssel müssen Sie die oben angegebene Passphrase kennen (im Beispiel: rootPW). Verwenden Sie zum Kodieren des privaten Schlüssels ein eigenes sicheres Passwort.
Root-Zertifikat erstellen
Der OpenSSL-Befehl zur Erstellung von CArootCert lautet:
openssl req -batch -new -config rootCert.conf -x509
-key rootKey.pem -keyform PEM -passin pass:rootPW -sha256 -days 5479 -outform PEM -out rootCert.pem
Erläuterung der Argumente:
Argument |
Erläuterung |
---|---|
req |
req weist OpenSSL an, eine Anforderung (Standard) für ein Zertifikat zu erstellen. |
-batch |
Kein interaktiver Modus. |
-new |
Neue Anfrage oder neues Zertifikat erstellen. |
-config filename |
Name und Speicherort der OpenSSL-Konfigurationsdatei (im Beispiel: rootCert.conf). |
-x509 |
Selbstsigniertes Zertifikat statt einer Zertifikatanfrage erstellen. |
-key filename |
Der entsprechende private Schlüssel (im Beispiel: rootkey.pem). |
-keyform PEM |
Der private Schlüssel weist das Format PEM auf. |
-passin pass:password |
Das für die Kodierung des privaten Schlüssels benötigte Passwort (im Beispiel: rootPW).
|
-sha256 |
Mit dem Algorithmus SHA256 können Sie das Message Digest für die Signatur erstellen (empfohlen). |
-days 5479 |
Der Zeitraum, für den ein Zertifikat gültig ist. |
-outform PEM |
Das Format der Ausgabedatei ist PEM. |
-out filename |
Der Name der Ausgabedatei, also das Zertifikat (im Beispiel rootCert.pem). |
Mit dem Befehl oben wird die Ausgabedatei erstellt:
–rootCert.pem
Diese Datei enthält das selbstsignierte Root-Zertifikat CArootCert.
Das zwischengeschaltete CA-Zertifikat CAcert ist zwar nicht selbstsigniert, wird aber durch die Root-CA ausgegeben (signiert). Daher müssen Sie zuerst einen privaten Schlüssel erstellen und eine entsprechende Zertifikatanforderung an die Root-CA „abschicken“. Die Root-CA gibt dann wiederum das CAcert aus.
Zuerst muss die Konfigurationsdatei wie im vorhergehenden Abschnitt beschrieben an Ihre Bedürfnisse angepasst werden.
OpenSSL-Konfigurationsdatei und die Umgebung anpassen
Kopieren Sie die Datei caCert.conf, die im Installationsarchiv
mdm-ca-1.11.x.zip enthalten ist, in Ihr Arbeitsverzeichnis. Passen Sie den Bereich [ ca_dn ] der Datei, in dem der Subject Distinguished Name Ihres Root-CA-Zertifikats enthalten ist, an:
[ ca_dn ]
C= DE
O= Innominate Security Technologies AG
OU= Research & Development
CN= Test CA
Passen Sie ebenfalls die Einträge crlDistributionPoints und authorityInfoAccess des Bereichs [ ca_ext ] der Konfigurationsdatei an (Erläuterung siehe Abschnitt Certificate extensions):
[ ca_ext ]
crlDistributionPoints=URI:http://ca.example.com/ca-ca.crl
authorityInfoAccess=OCSP;URI:http://ca.example.com/ocsp/ca-ca
Die Konfigurationsdatei enthält einige Parameter, die nicht in die Kommandozeile eingegeben werden können. Diese Einträge geben Dateien an, die im Dateisystem vorhanden sein müssen. Daher sind diese Dateien zuerst manuell zu erstellen (die Dateinamen werden ebenfalls in der Datei caCert.con verwendet, benutzen Sie daher genau die gleichen Dateinamen wie unten angegeben):
–Erstellen Sie in Ihrem Arbeitsverzeichnis ein Unterverzeichnis archive
(Linux: mkdir ./archive)
–Legen Sie im Unterverzeichnis archive eine Datei mit der Bezeichnung serial an, die die gültige Seriennummer für das Zertifikat enthält
(Linux: echo 1234 > archive/serial)
–Legen Sie eine leere Datei an, die als OpenSSL-Datenbank verwendet werden kann.
(Linux: touch archive/index.txt
Windows: copy NUL: archive/index.txt)
Privaten Schlüssel erstellen
Zuerst ist mit dem folgendem Befehl der private Schlüssel CAkey zu erstellen:
openssl genrsa -aes256 -passout pass:caPW -out caKey.pem 2048
Erläuterung der Argumente:
Argument |
Erläuterung |
---|---|
genrsa |
genrsa weist OpenSSL an, einen RSA-Schlüssel zu erstellen. |
-aes256 |
Zum Kodieren des Schlüssels AES256 verwenden. |
-passout pass:password |
Das zum Kodieren des privaten Schlüssels (im Beispiel: caPW) verwendete Passwort caPW ist lediglich ein Beispiel und sollte durch ein sicheres Passwort ersetzt werden. |
-out filename |
Name der Datei, die den privaten Schlüssel enthält (im Beispiel: caKey.pem). |
2048 |
Die Länge des Schlüssels.
|
Mit diesem Befehl wird die Ausgabedatei erstellt:
–caKey.pem
Diese Datei enthält den CAkey im PEM-Format. Der Schlüssel wird mit dem AES256-Algorithmus kodiert. Für den Zugriff auf den Schlüssel müssen Sie die oben angegebene Passphrase kennen (im Beispiel: caPW). Verwenden Sie zum Kodieren des privaten Schlüssels ein eigenes sicheres Passwort.
Zertifikatanfrage erstellen
Eine Zertifikatanfrage wird mit folgendem Befehl erstellt:
openssl req -batch -new -config caCert.conf
-key caKey.pem -keyform PEM -passin pass:caPW -sha256
-out caCertReq.pem -outform PEM
Erläuterung der Argumente:
Argument |
Erläuterung |
---|---|
req |
req weist OpenSSL an, eine Anforderung (Standard) für ein Zertifikat zu erstellen. |
-batch |
Kein interaktiver Modus. |
-new |
Neue Anfrage erstellen. |
-config filename |
Name und Speicherort der OpenSSL-Konfigurationsdatei (im Beispiel: caCert.conf). |
-key filename |
Der entsprechende private Schlüssel (im Beispiel: caKey.pem). |
-keyform PEM |
Der private Schlüssel weist das Format PEM auf. |
-passin pass:password |
Das für die Kodierung des privaten Schlüssels benötigte Passwort (im Beispiel: caPW). |
-sha256 |
Mit dem Algorithmus SHA256 können Sie das Message Digest für die Signatur erstellen (empfohlen). |
-outform PEM |
Das Format der Ausgabedatei ist PEM. |
-out filename |
Der Name der Ausgabedatei, also das Zertifikat (im Beispiel caCertReq.pem). |
Mit dem Befehl oben wird die Ausgabedatei erstellt:
–caCertReq.pem
Diese Datei enthält die Zertifikatanfrage.
CA-Zertifikat anfordern
Die Anfrage muss an die Root-CA übermittelt werden. Da die mdm CA im Beispiel die Root-CA ist, können Sie das Zertifikat mit folgendem Befehl ausgeben:
openssl ca -batch -config caCert.conf -days 3653
-in caCertReq.pem -cert rootCert.pem -keyfile rootKey.pem
-passin pass:rootPW -md sha256 -notext -out caCert.pem
-outdir .
Erläuterung der Argumente:
Argument |
Erläuterung |
---|---|
ca |
Der Befehl ca ist eine minimale CA-Anwendung. Mit ihm können Zertifikatanfragen signiert und CRLs erstellt werden. |
-batch |
Kein interaktiver Modus. |
-config filename |
Name und Speicherort der OpenSSL-Konfigurationsdatei (im Beispiel: caCert.conf). |
-days 3653 |
Der Zeitraum, für den ein Zertifikat gültig ist. |
-in filename |
Der Name der Datei, die die Zertifikatanfrage enthält (im Beispiel caCertReq.pem). |
-cert filename |
Der Name der Datei, die das Root-Zertifikat enthält (im Beispiel rootCert.pem). |
-keyfile filename |
Der Name der Datei, die den zum Signieren der Zertifikatanfrage verwendeten Schlüssel enthält (im Beispiel rootKey.pem). |
-passin pass:password |
Das für die Kodierung des privaten Schlüssels benötigte Passwort (im Beispiel: rootPW). |
-md sha256 |
Mit dem Algorithmus SHA256 können Sie das Message Digest für die Signatur erstellen (empfohlen). |
-notext |
openssl verfügt über die Möglichkeit, durch Benutzer lesbaren beschreibenden Text in das Zertifikat einzufügen. Dies würde jedoch im weiteren Prozessverlauf Probleme beim Anlegen der Schlüsselspeicher verursachen, daher sollte kein Text in das Zertifikat eingefügt werden. |
-outdir directoryName |
Das Ausgabeverzeichnis (im Beispiel das aktuelle Arbeitsverzeichnis “.”). |
Mit dem Befehl oben wird die Ausgabedatei erstellt:
–caCert.pem
Diese Datei enthält CAcert.
Die CA dient der Ausgabe von Zertifikaten. Dazu benötigt die CA eine Anleitung zu den auszugebenden Zertifikaten, beispielsweise zu den benötigten Erweiterungen. Dazu kann der CA eine Zertifikatvorlage zur Verfügung gestellt werden (CAtemplCert). CAtemplCert ist ein von der CA ausgegebenes Zertifikat. Zur Ausgabe eines Zertifikats müssen Sie zunächst wieder eine OpenSSL-Konfigurationsdatei anpassen.
OpenSSL-Konfigurationsdatei anpassen
Kopieren Sie die Datei templateCert.conf, die im Installationsarchiv
mdm-ca-1.11.x.zip enthalten ist, in Ihr Arbeitsverzeichnis. Passen Sie die Einträge crlDistributionPoints und authorityInfoAccess des Bereichs [ template_ext ] der Konfigurationsdatei an (Erläuterung siehe Abschnitt Certificate extensions):
[ template_ext ]
crlDistributionPoints=URI:http://ca.example.com/ca-ee.crl
authorityInfoAccess=OCSP;URI:http://ca.example.com/ocsp/ca-ee
Privaten Schlüssel erstellen
Zuerst ist mit dem folgendem Befehl der private Schlüssel zu erstellen:
openssl genrsa -aes256 -passout pass:caPW -out templateKey.pem 2048
Erläuterung der Argumente:
Argument |
Erläuterung |
---|---|
genrsa |
genrsa weist OpenSSL an, einen RSA-Schlüssel zu erstellen. |
-aes256 |
Zum Kodieren des Schlüssels AES256 verwenden. |
-passout pass:password |
Das zum Kodieren des privaten Schlüssels (im Beispiel: caPW) verwendete Passwort caPW ist lediglich ein Beispiel und sollte durch ein sicheres Passwort ersetzt werden. |
-out filename |
Name der Datei, die den privaten Schlüssel enthält (im Beispiel: templateKey.pem). |
2048 |
Die Länge des Schlüssels. |
Mit diesem Befehl wird die Ausgabedatei erstellt:
–templateKey.pem
Diese Datei enthält einen kodierten privaten Schlüssel.
Zertifikatanfrage erstellen
Eine Zertifikatanfrage wird mit folgendem Befehl erstellt:
openssl req -new -batch -config templateCert.conf
-key templateKey.pem -keyform PEM -passin pass:caPW
-sha256 -outform PEM -out templateCertReq.pem
Erläuterung der Argumente:
Argument |
Erläuterung |
---|---|
req |
req weist OpenSSL an, eine Anforderung (Standard) für ein Zertifikat zu erstellen. |
-batch |
Kein interaktiver Modus. |
-new |
Neue Anfrage oder neues Zertifikat erstellen. |
-config filename |
Name und Speicherort der OpenSSL-Konfigurationsdatei (im Beispiel: templateCert.conf). |
-key filename |
Der entsprechende private Schlüssel (im Beispiel: templateKey.pem). |
-keyform PEM |
Der private Schlüssel weist das Format PEM auf. |
-passin pass:password |
Das für die Kodierung des privaten Schlüssels benötigte Passwort (im Beispiel: caPW). |
-sha256 |
Mit dem Algorithmus SHA256 können Sie das Message Digest für die Signatur erstellen (empfohlen). |
-outform PEM |
Das Format der Ausgabedatei ist PEM. |
-out filename |
Der Name der Ausgabedatei, also das Zertifikat (im Beispiel templateCertReq.pem). |
Mit dem Befehl oben wird die Ausgabedatei erstellt:
–templateCertReq.pem
Diese Datei enthält die Zertifikatanfrage.
Zertifikatvorlage anfordern
Die Anfrage muss an die (zwischengeschaltete) CA übermittelt werden. Sie können die Zertifikatanfrage mit dem folgenden Befehl signieren (das Zertifikat ausgeben):
openssl ca -batch -config templateCert.conf -days 1826
-md sha256 -in templateCertReq.pem -keyfile caKey.pem
-cert caCert.pem -passin pass:caPW -notext
-out templateCert.pem -outdir .
Erläuterung der Argumente:
Argument |
Erläuterung |
---|---|
ca |
Der Befehl ca ist eine minimale CA-Anwendung. Mit ihm können Zertifikatanfragen signiert und CRLs erstellt werden. |
-batch |
Kein interaktiver Modus. |
-config filename |
Name und Speicherort der OpenSSL-Konfigurationsdatei (im Beispiel: templateCert.conf). |
-days 1826 |
Der Zeitraum, für den ein Zertifikat gültig ist. |
-in filename |
Der Name der Datei, die die Zertifikatanfrage enthält (im Beispiel templateCertReq.pem). |
-cert filename |
Der Name der Datei, die das Root-Zertifikat enthält (im Beispiel caCert.pem). |
-keyfile filename |
Der Name der Datei, die den zum Signieren der Zertifikatanfrage verwendeten Schlüssel enthält (im Beispiel caKey.pem). |
-passin pass:password |
Das für die Kodierung des privaten Schlüssels benötigte Passwort (im Beispiel: caPW). |
-md sha256 |
Mit dem Algorithmus SHA256 können Sie das Message Digest für die Signatur erstellen (empfohlen). |
-notext |
openssl verfügt über die Möglichkeit, durch Benutzer lesbaren beschreibenden Text in das Zertifikat einzufügen. Dies würde jedoch im weiteren Prozessverlauf Probleme beim Anlegen der Schlüsselspeicher verursachen, daher sollte kein Text in das Zertifikat eingefügt werden. |
-outdir directoryName |
Das Ausgabeverzeichnis (im Beispiel das aktuelle Arbeitsverzeichnis “.”). |
Mit dem Befehl oben wird die Ausgabedatei erstellt:
–templateCert.pem
Diese Datei enthält CAtemplCert. Die Datei sollte in ihr endgültiges Zielverzeichnis kopiert werden; der Speicherort ist in ca-preferences.xml im Knoten
certificateFactory » certTemplate zu konfigurieren.
9.2.2Schlüsselverzeichnisse erstellen
Nach Durchführung der in Kapitel 9.2.1 beschriebenen Schritte sollten Sie in Ihrem Arbeitsverzeichnis die folgenden Dateien vorfinden:
–templateCert.pem
Diese Datei enthält CAtemplCert, signiert mit CAkey.
–caCert.pem
Diese Datei enthält CAcert, signiert mit CArootKey.
–caKey.pem
Diese Datei enthält CAkey.
–rootCert.pem
Diese Datei enthält das selbstsignierte Root-Zertifikat CArootCert.
–rootKey.pem
Diese Datei enthält den kodierten privaten Schlüssel CArootKey.
Einige dieser Dateien müssen in den Schlüsselspeichern enthalten sein. Das Installationsarchiv mdm-ca-1.11.x.zip enthält das (proprietäre) Java-Tool ImportKey im Verzeichnis demoCA das für das Anlegen und Verwalten von Schlüsselspeichern verwendet werden kann. Kopieren Sie die Datei ImportKey.class in Ihr Arbeitsverzeichnis.
Zuerst müssen das zwischengeschaltete CA-Zertifikat und das Root-Zertifikat in einer Datei zusammengeführt werden (eine Zertifikatskette erstellt werden):
cat caCert.pem rootCert.pem > caCertWithChain.pem
Dann muss der Key caKey.perm in das Format PKCS#8 umgewandelt und sowohl CAkey als auch die Zertifikatskette müssen in einen PKC#12-Schlüsselspeicher übernommen werden. Dies kann mit dem Tool ImportKey abgeschlossen werden. ImportKey akzeptiert nur den (nicht kodierten) Schlüssel am Standardeingang, daher kann die Ausgabe des Befehls pkcs8 wie folgt weitergereicht werden:
openssl pkcs8 -topk8 -in caKey.pem -passin pass:caPW
-inform PEM -nocrypt -outform DER |
java -cp . ImportKey -alias ca -keystore ca-keystore.jks -storetype JKS -storepass pass:caPW -keypass pass:caPW
-chain caCertWithChain.pem
Erläuterung der openssl-Argumente:
Argument |
Erläuterung |
---|---|
pkcs8 |
Mit dem Befehl pkcs8 werden private Schlüssel im Format PKCS#8 verarbeitet. |
-topk8 |
Privaten Schlüssel im traditionellen Format verwenden und Schlüssel im Format PKCS#8 schreiben. |
-in filename |
Name und Speicherort der Eingabedatei (im Beispiel: caKey.pem). |
-passin pass:password |
Das für die Dekodierung der Eingabe benötigte Passwort (im Beispiel: caPW). |
-inform PEM |
Das Eingabeformat des Schlüssels ist PEM. |
-nocrypt |
Die Ausgabe (der Schlüssel) ist nicht kodiert. |
-outform DER |
Das Ausgabeformat ist DER. |
Erläuterung der ImportKey-Argumente:
Argument |
Erläuterung |
---|---|
-alias name |
Ein Schlüsselspeicher kann mehrere Einträge enthalten. Der Alias kennzeichnet den Eintrag und darf daher im Schlüsselspeicher nur einmal vorkommen. Aliases sind unabhängig von Groß- und Kleinschreibung. |
-keystore filename |
Die Datei, die den Schlüsselspeicher enthält (im Beispiel: ca-keyStore.jks). |
-storetype JKS |
Verwenden Sie für den Schlüsselspeicher das Format JKS. |
-storepass pass:password |
Das für die Dekodierung der Inhalte des Schlüsselspeichers benötigte Passwort (im Beispiel: caPW). |
-keypass pass:password |
Zusätzliches Passwort für die Dekodierung des privaten Schlüssels im Schlüsselspeicher. |
-chain filename |
Die Zertifikatskette mit dem Root-Zertifikat. |
Mit dem Befehl oben wird die Ausgabedatei erstellt:
–ca-keystore.jks
Dies ist der Schlüsselspeicher für Ihre CA, der die Zertifikatskette und den privaten CA-Schlüssel enthält. Kopieren Sie den Schlüsselspeicher in sein endgültiges Zielverzeichnis.
–Der Dateiname mit dem absoluten oder relativen Pfad dieses Schlüsselspeichers muss in der Datei ca-preferences.xml im Knoten certificateFactory » keyStore konfiguriert werden.
–Das Passwort für den Zugriff auf den Schlüsselspeicher (im Beispiel caPW) muss in der Datei ca-preferences.xml im Knoten certificateFactory » keyStorePassword konfiguriert werden.
–Das Format dieses Schlüsselspeichers (Java KeyStore - JKS) muss in der Datei ca-preferences.xml im Knoten certificateFactory » keyStoreType konfiguriert werden.
–Das Passwort für den Zugriff auf den privaten Schlüssel (im Beispiel caPW) muss in der Datei ca-preferences.xml im Knoten certificateFactory » keyStorePassword konfiguriert werden.
–Der Alias (ca) des Schlüssels muss in der Datei ca-preferences.xml im Knoten certificateFactory » keyAlias konfiguriert werden.
9.2.3Anforderungen an Zertifikate
Für die einwandfreie Funktion der VPN-Zertifikate auch mit zukünftigen Versionen der mGuard-Firmware und des mdm müssen die Zertifikate folgende Anforderungen erfüllen:
1.Der private Schlüssel sollte eine Länge von mindestens 1024 Bit aufweisen. Phoenix Contact empfiehlt für die langfristige Sicherheit eine Schlüssellänge von 2048 Bit.
2.Alle Zertifikate müssen RFC 3280 entsprechen.
3.Alle Zertifikate müssen eine Basic Constraints-Erweiterung aufweisen, die als kritisch markiert ist und das Boolean-Feld cA muss auf true gesetzt sein.
4.Phoenix Contact empfiehlt dringend, das Feld pathLenConstraint in die Basic Constraints-Erweiterung aller Zertifikate einzubeziehen. Es muss auf eine Zahl unter der Anzahl der nachfolgenden Zertifikate gesetzt sein. Für ein typisches Szenario, bei dem eine Zertifikatskette aus einem Root-CA-Zertifikat, einem einzelnen zwischengeschaltetem CA-Zertifikat und einem End-Entitäts-Zertifikat (VPN-Zertifikat in diesem Fall) besteht, muss der pathLenConstraint eins (1) für das Root-CA-Zertifikat und Null für das zwischengeschaltete Zertifikat betragen.
5.Das Zertifikat des VPN-Templates muss über eine Basic Constraints-Erweiterung verfügen, die als kritisch markiert ist und das Boolean-Feld cA muss auf false gesetzt sein und ohne ein Feld pathLenConstraint.
6.Alle CA-Zertifikate müssen eine Key Usage-Erweiterung aufweisen, die als kritisch markiert ist und das Bit keyCertSign muss gesetzt sein. Es wird empfohlen, auch das Bit cRLSign zu setzen.
7.Das Zertifikat des VPN-Templates benötigt keine Key Usage-Erweiterung.
8.Ein zwischengeschaltetes CA-Zertifikat muss eine oder beide Erweiterungen CRL Distribution Points und Authority Information Access enthalten, wenn Sperrinformationen online mit einer zukünftigen Version von mdm und der mGuard-Firmware weitergeleitet werden sollen. Die Erweiterung muss als nicht-kritisch gekennzeichnet sein. Die frühere Erweiterung wird benötigt, wenn die Zertifikatssperrlisten (CRLs) in Zukunft verwendet werden sollen. Die letztere Erweiterung wird benötigt, wenn zukünftig die Verwendung des Online Certificate Status Protocol (OCSP, siehe RFC 2560) geplant ist. Jede der Erweiterungen darf nur HTTP-URLs enthalten.
9.Ein Template für ein VPN-Zertifikat sollte eine oder beide Erweiterungen CRL Distribution Points und Authority Information Access wie oben beschrieben enthalten, wenn Sperrinformationen online weitergeleitet werden sollen. Alternativ kann der mdm-Server angewiesen werden, diese in die Zertifikatanfrage einzufügen, die an die mdm CA übermittelt wurde. Das letztere ist flexibler, weil auf diese Art der Speicherort der Sperrinformationen (CRL) bzw. der Informationsdienst (OSCP) für Gerätegruppen und sogar für einzelne Geräte eingerichtet werden.
Hinweis: Wenn das Template für das VPN-Zertifikat bereits eine dieser Erweiterungen enthält und der mdm angewiesen ist, dieses auch in die Zertifikatanforderung einzufügen, überschreibt die Erweiterung aus der Anfrage die im Template enthaltene Erweiterung. Das ausgegebene Zertifikat enthält die aus der Anfrage kopierte Erweiterung.
10.Der Schlüsselspeicher muss die komplette Zertifikatskette bis einschließlich des Root-Zertifikats enthalten.