Eine Zertifizierungsstelle (Certificate Authority, CA) ist eine Stelle, die für die Ausstellung digitaler Zertifikate zur Überprüfung von Identitäten im Internet verantwortlich ist. Obwohl öffentliche CAs eine beliebte Wahl für die Überprüfung der Identität von Websites und anderen Diensten sind, die der allgemeinen Öffentlichkeit zur Verfügung gestellt werden, werden private CAs normalerweise für geschlossene Gruppen und private Dienste verwendet.
Die Erstellung einer privaten Zertifizierungsstelle ermöglicht es Ihnen, Programme zu konfigurieren, zu testen und auszuführen, die verschlüsselte Verbindungen zwischen einem Client und einem Server erfordern. Mit einer privaten CA können Sie Zertifikate für Benutzer, Server oder einzelne Programme und Dienste innerhalb Ihrer Infrastruktur ausstellen.
Einige Beispiele für Programme unter Linux, die ihre eigene private CA verwenden, sind OpenVPN und Puppet. Sie können Ihren Webserver auch so konfigurieren, dass er Zertifikate verwendet, die von einer privaten CA ausgestellt wurden, um Entwicklungs- und Staging-Umgebungen an Produktionsserver anzupassen, die TLS zur Verschlüsselung von Verbindungen verwenden.
In diesem Leitfaden lernen wir, wie eine private Zertifizierungsstelle auf einem Debian 10-Server eingerichtet wird und wie mit einer neuen CA ein Testzertifikat erzeugt und signiert wird. Außerdem erfahren Sie, wie Sie das öffentliche Zertifikat des CA-Servers in den Zertifikatsspeicher Ihres Betriebssystems importieren, damit Sie die Vertrauenskette zwischen der CA und entfernten Servern oder Benutzern überprüfen können. Schließlich werden Sie lernen, wie Sie Zertifikate widerrufen und eine Zertifikatswiderrufsliste verteilen, um sicherzustellen, dass nur autorisierte Benutzer und Systeme Dienste nutzen können, die auf Ihrer CA beruhen.
Um dieses Tutorial zu absolvieren, benötigen Sie Zugriff auf einen Debian 10-Server, der Ihren OpenVPN-Dienst hosten kann. Sie müssen einen non-root user mit sudo
-Rechten konfigurieren, bevor Sie diesen Leitfaden starten können. Sie können unserem Leitfaden zur Ersteinrichtung eines Debian-10-Servers folgen, um einen Benutzer mit entsprechenden Berechtigungen einzurichten. Das verknüpfte Tutorial richtet auch eine Firewall ein, und in diesem Leitfaden wird davon ausgegangen, dass sie vorhanden ist.
Dieser Server wird in diesem Tutorial als CA-Server bezeichnet.
Stellen Sie sicher, dass der CA-Server ein eigenständiges System ist. Er wird nur zum Importieren, Signieren und Widerrufen von Zertifikatanforderungen verwendet. Auf ihm sollten keine anderen Dienste ausgeführt werden, und idealerweise ist er offline oder wird vollständig heruntergefahren, wenn Sie nicht aktiv mit Ihrer CA arbeiten.
Anmerkung: Der letzte Abschnitt dieses Tutorials ist optional, wenn Sie über das Signieren und Widerrufen von Zertifikaten lernen möchten. Wenn Sie sich entscheiden, diese Übungsschritte durchzuführen, benötigen Sie einen zweiten Debian-10-Server oder Sie können Ihren eigenen lokalen Linux-Computer verwenden, auf dem Debian oder Ubuntu oder davon abgeleitete Distributionen ausgeführt werden.
Die erste Aufgabe in diesem Tutorial besteht darin, den Skriptsatz easy-rsa
auf Ihrem CA-Server zu installieren. easy-rsa
ist ein Verwaltungswerkzeug für Zertifizierungsstellen, mit dem Sie einen privaten Schlüssel und ein öffentliches Stammzertifikat erzeugen, die Sie dann zum Signieren von Anfragen von Clients und Servern verwenden, die auf Ihre CA angewiesen sind.
Melden Sie sich bei Ihrem CA-Server als non-root sudo user an, den Sie während der anfänglichen Einrichtungsschritte erstellt haben, und führen Sie Folgendes aus:
- sudo apt update
- sudo apt install easy-rsa
Sie werden aufgefordert, das Paket herunterzuladen und zu installieren. Drücken Sie y
, um zu bestätigen, dass Sie das Paket installieren möchten.
An dieser Stelle haben Sie alles Nötige eingerichtet und sind bereit, Easy-RSA zu verwenden. Im nächsten Schritt werden Sie eine Public-Key-Infrastruktur erstellen und dann mit dem Erstellen Ihrer Zertifizierungsstelle beginnen.
Nachdem Sie nun easy-rsa
installiert haben, ist es an der Zeit, eine grundlegende Public-Key-Infrastruktur (PKI) auf dem CA-Server zu erstellen. Stellen Sie sicher, dass Sie immer noch als non-root user angemeldet sind und erstellen Sie ein easy-rsa
-Verzeichnis. Stellen Sie sicher, dass Sie sudo nicht verwenden, um einen der folgenden Befehle auszuführen, da Ihr normaler Benutzer die CA ohne erhöhte Berechtigungen verwalten und mit ihr interagieren sollte.
- mkdir ~/easy-rsa
Dadurch wird ein neues Verzeichnis namens easy-rsa
in Ihrem Home-Ordner erstellt. Wir werden dieses Verzeichnis verwenden, um symbolische Links zu erstellen, die auf die easy-rsa
-Paketdateien verweisen, die wir im vorigen Schritt installiert haben. Diese Dateien befinden sich im Ordner /usr/share/easy-rsa
auf dem CA-Server.
Erstellen Sie die Symlinks mit dem Befehl ln
:
- ln -s /usr/share/easy-rsa/* ~/easy-rsa/
Anmerkung: Während andere Leitfäden Sie möglicherweise anweisen, die Dateien des easy-rsa
-Pakets in Ihr PKI-Verzeichnis zu kopieren, verfolgt dieses Tutorial einen Symlink-Ansatz. Infolgedessen werden alle Aktualisierungen des easy-rsa
-Pakets automatisch in den Skripten Ihrer PKI wiedergegeben.
Um den Zugriff auf Ihr neues PKI-Verzeichnis einzuschränken, stellen Sie sicher, dass nur der Eigentümer mit dem Befehl chmod
darauf zugreifen kann:
- chmod 700 /home/sammy/easy-rsa
Anschließend initialisieren Sie die PKI innerhalb des easy-rsa
-Verzeichnisses:
- cd ~/easy-rsa
- ./easyrsa init-pki
Outputinit-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/sammy/easy-rsa/pki
Nachdem Sie diesen Abschnitt abgeschlossen haben, haben Sie ein Verzeichnis, das alle Dateien enthält, die zur Erstellung einer Zertifizierungsstelle benötigt werden. Im nächsten Abschnitt werden Sie den privaten Schlüssel und das öffentliche Zertifikat für Ihre CA erstellen.
Bevor Sie den privaten Schlüssel und das Zertifikat Ihrer CA erstellen können, müssen Sie eine Datei namens vars
erstellen und mit einigen Standardwerten füllen. Zuerst werden Sie cd
in das Verzeichnis easy-rsa
, dann werden Sie die Datei vars
mit nano
oder Ihrem bevorzugten Texteditor erstellen und bearbeiten:
- cd ~/easy-rsa
- nano vars
Sobald die Datei geöffnet ist, fügen Sie die folgenden Zeilen ein und bearbeiten Sie jeden hervorgehobenen Wert so, dass er Ihre eigenen Organisationsinformationen widerspiegelt. Wichtig dabei ist, dass Sie keinen der Werte leer lassen:
~/easy-rsa/varsset_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "NewYork"
set_var EASYRSA_REQ_CITY "New York City"
set_var EASYRSA_REQ_ORG "DigitalOcean"
set_var EASYRSA_REQ_EMAIL "admin@example.com"
set_var EASYRSA_REQ_OU "Community"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
Wenn Sie dies abgeschlossen haben, speichern und schließen Sie die Datei. Wenn Sie nano
verwenden, können Sie dies durch Drücken von STRG+X
, dann Y
und ENTER
zur Bestätigung tun. Sie sind nun bereit, Ihre CA zu erstellen.
Um das öffentliche und private Stammschlüsselpaar für Ihre Zertifizierungsstelle zu erstellen, führen Sie den Befehl ./easy-rsa
erneut aus, diesmal mit der Option build-ca
:
- ./easyrsa build-ca
In der Ausgabe sehen Sie einige Zeilen über die OpenSSL-Version und werden dazu aufgefordert, eine Passphrase für Ihr Schlüsselpaar einzugeben. Achten Sie darauf, eine starke Passphrase zu wählen, und notieren Sie sie an einem sicheren Ort. Sie müssen die Passphrase jedes Mal eingeben, wenn Sie mit Ihrer CA interagieren müssen, zum Beispiel zum Signieren oder Widerrufen eines Zertifikats.
Sie werden auch gebeten, den Common Name (CN) für Ihre CA zu bestätigen. Der CN ist der Name, der verwendet wird, um im Kontext der Zertifizierungsstelle auf diesen Computer zu verweisen. Sie können eine beliebige Zeichenfolge für den Common Name der CA eingeben, aber drücken Sie der Einfachheit halber ENTER, um den Standardnamen zu akzeptieren.
Output. . .
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
. . .
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/sammy/easy-rsa/pki/ca.crt
Anmerkung: Wenn Sie nicht bei jeder Interaktion mit Ihrer CA zur Eingabe eines Passworts aufgefordert werden möchten, können Sie den Befehl build-ca
mit der Option nopass
wie folgt ausführen:
- ./easyrsa build-ca nopass
Sie haben nun zwei wichtige Dateien – ~/easy-rsa/pki/ca.crt
und ~/easy-rsa/pki/private/ca.key
– die die öffentlichen und privaten Komponenten einer Zertifizierungsstelle bilden.
ca.crt
ist die öffentliche Zertifikatsdatei der CA. Benutzer, Server und Clients verwenden dieses Zertifikat, um zu überprüfen, ob sie Teil desselben vertrauenswürdigen Webs sind. Jeder Benutzer und Server, der Ihre CA verwendet, muss eine Kopie dieser Datei haben. Alle Parteien verlassen sich auf das öffentliche Zertifikat, um sicherzustellen, dass sich nicht jemand als System ausgibt und einen Man-in-the-middle-Angriff durchführt.
ca.key
ist der private Schlüssel, den die CA zum Signieren von Zertifikaten für Server und Clients verwendet. Wenn ein Angreifer Zugriff auf Ihre CA und damit auf Ihre ca.key
-Datei erhält, müssen Sie Ihre CA vernichten. Deshalb sollte sich Ihre Datei ca.key
nur auf Ihrem CA-Computer befinden und Ihr CA-Computer im Idealfall als zusätzliche Sicherheitsmaßnahme offline bleiben, wenn keine Zertifikatanforderungen signiert werden.
Damit ist Ihre CA vorhanden und bereit, zum Signieren von Zertifikatanforderungen und zum Widerrufen von Zertifikaten verwendet zu werden.
Nun ist Ihre CA konfiguriert und bereit, als Vertrauensgrundlage für alle Systeme zu fungieren, die Sie für ihre Verwendung konfigurieren möchten. Sie können das Zertifikat der CA zu Ihren OpenVPN-Servern, Webservern, Mail-Servern usw. hinzufügen. Jeder Benutzer oder Server, der die Identität eines anderen Benutzers oder Servers in Ihrem Netzwerk überprüfen muss, sollte eine Kopie der Datei ca.crt
haben, die in den Zertifikatsspeicher ihres Betriebssystems importiert ist.
Um das öffentliche Zertifikat der CA in ein zweites Linux-System wie einen anderen Server oder einen lokalen Computer zu importieren, besorgen Sie sich zunächst eine Kopie der ca.crt
-Datei von Ihrem CA-Server. Sie können den Befehl cat
verwenden, um sie in einem Terminal auszugeben, und sie dann kopieren und in eine Datei auf dem zweiten Computer, der das Zertifikat importiert, einfügen. Sie können auch Tools wie scp
, rsync
verwenden, um die Datei zwischen Systemen zu übertragen. Wir werden in diesem Schritt jedoch Kopieren und Einfügen mit nano
verwenden, da dies auf allen Systemen funktioniert.
Führen Sie als non-root user auf dem CA-Server den folgenden Befehl aus:
- cat ~/easy-rsa/pki/ca.crt
Es wird eine Ausgabe in Ihrem Terminal geben, die der folgenden ähnelt:
Output-----BEGIN CERTIFICATE-----
MIIDSzCCAjOgAwIBAgIUcR9Crsv3FBEujrPZnZnU4nSb5TMwDQYJKoZIhvcNAQEL
BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjAwMzE4MDMxNjI2WhcNMzAw
. . .
. . .
-----END CERTIFICATE-----
Kopieren Sie alles, einschließlich der Zeilen -----BEGIN CERTIFICATE-----
und -----END CERTIFICATE-----
und der Bindestriche.
Verwenden Sie auf Ihrem zweiten Linux-System nano
oder Ihren bevorzugten Texteditor, um eine Datei namens /tmp/ca.crt
zu öffnen:
- nano /tmp/ca.crt
Fügen Sie den Inhalt, den Sie gerade vom CA-Server kopiert haben, in den Editor ein. Wenn Sie dies abgeschlossen haben, speichern und schließen Sie die Datei. Wenn Sie nano
verwenden, können Sie dies durch Drücken von STRG+X
, dann Y
und ENTER
zur Bestätigung tun.
Nachdem Sie nun eine Kopie der Datei ca.crt
auf Ihrem zweiten Linux-System haben, ist es an der Zeit, das Zertifikat in den Zertifikatsspeicher des Betriebssystems zu importieren.
Führen Sie auf Debian- und Ubuntu-basierten Systemen die folgenden Befehle aus, um das Zertifikat zu importieren:
- cp /tmp/ca.crt /usr/local/share/ca-certificates/
- update-ca-certificates
Um das Zertifikat des CA-Servers auf einem CentOS-, Fedora- oder RedHat-basierten System zu importieren, kopieren Sie den Inhalt der Datei und fügen Sie ihn wie im vorherigen Beispiel in das System in eine Datei namens /tmp/ca.crt
ein. Kopieren Sie als Nächstes das Zertifikat nach /etc/pki/ca-trust/source/anchors/
und führen Sie dann den Befehl update-ca-trust
aus.
- sudo cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/
- update-ca-trust
Nun wird Ihr zweites Linux-System auf jedes Zertifikat vertrauen, das vom CA-Server signiert wurde.
Anmerkung: Wenn Sie Ihre CA mit Web-Servern verwenden und Firefox als Browser verwenden, müssen Sie das öffentliche Zertifikat ca.crt
direkt in Firefox importieren. Firefox verwendet nicht den Zertifikatsspeicher des lokalen Betriebssystems. Einzelheiten dazu, wie Sie das Zertifikat Ihrer CA in Firefox hinzufügen können, finden Sie in diesem Support-Artikel von Mozilla über das Einrichten von Zertifizierungsstellen (CAs) in Firefox.
Wenn Sie Ihre CA zur Integration in eine Windows-Umgebung oder in Desktop-Computer verwenden, lesen Sie bitte die Dokumentation über die Verwendung von certutil.exe
zur Installation eines CA-Zertifikats.
Wenn Sie dieses Tutorial als Voraussetzung für ein anderes Tutorial verwenden oder mit dem Signieren und Widerrufen von Zertifikaten vertraut sind, können Sie hier aufhören. Wenn Sie mehr zum Thema Signieren und Widerrufen von Zertifikaten erfahren möchten, dann wird im folgenden optionalen Abschnitt jeder Vorgang im Detail erklärt.
Die folgenden Abschnitte des Tutorials sind optional. Wenn Sie alle vorherigen Schritte abgeschlossen haben, verfügen Sie über eine vollständig konfigurierte und funktionierende Zertifizierungsstelle, die Sie als Voraussetzung für andere Tutorials verwenden können. Sie können die Datei ca.crt
Ihrer CA importieren und Zertifikate in Ihrem Netzwerk überprüfen, die von Ihrer CA signiert wurden.
Wenn Sie üben und mehr über das Signieren von Zertifikatanforderungen und das Widerrufen von Zertifikaten erfahren möchten, dann werden diese optionalen Abschnitte erklären, wie beide Prozesse funktionieren.
Nachdem Sie nun eine einsatzbereite CA haben, können Sie das Erzeugen eines privaten Schlüssels und einer Zertifikatanforderung üben, um sich mit dem Signier- und Verteilungsprozess vertraut zu machen.
Eine Zertifikatsignaturanforderung (Certificate Signing Request, CSR) besteht aus drei Teilen: einem öffentlichen Schlüssel, dem Identifizieren von Informationen über das anfordernde System und einer Signatur der Anforderung selbst, die mit dem privaten Schlüssel der anfragenden Partei erstellt wird. Der private Schlüssel wird geheim gehalten und wird zum Verschlüsseln von Informationen verwendet, die jeder mit dem signierten öffentlichen Zertifikat dann entschlüsseln kann.
Die folgenden Schritte werden auf Ihrem zweiten Linux-System Debian, Ubuntu oder einer Distribution, die von einem dieser Systeme abgeleitet ist, ausgeführt. Es kann sich um einen anderen Remote-Server oder einen lokalen Linux-Rechner wie einen Laptop oder einen Desktop-Rechner handeln. Da easy-rsa
nicht standardmäßig auf allen Systemen verfügbar ist, verwenden wir das Tool openssl
zum Erstellen eines privaten Übungsschlüssels und -zertifikats.
openssl
ist normalerweise standardmäßig auf den meisten Linux-Distributionen installiert, aber um sicherzugehen, führen Sie die folgenden Schritte auf Ihrem System aus:
- sudo apt update
- sudo apt install openssl
Wenn Sie zur Installation von openssl
aufgefordert werden, geben Sie y
ein, um mit den Installationsschritten fortzufahren. Nun sind Sie bereit, eine Übungs-CSR mit openssl
zu erstellen.
Der erste Schritt, den Sie zum Erstellen einer CSR ausführen müssen, ist die Erzeugung eines privaten Schlüssels. Um einen privaten Schlüssel mit openssl
zu erstellen, erstellen Sie ein Verzeichnis practice-csr
und erzeugen Sie darin einen Schlüssel. Wir werden diese Anfrage für einen fiktiven Server namens sammy-server
stellen, im Gegensatz zur Erstellung eines Zertifikats, das zur Identifizierung eines Benutzers oder einer anderen CA verwendet wird.
- mkdir ~/practice-csr
- cd ~/practice-csr
- openssl genrsa -out sammy-server.key
OutputGenerating RSA private key, 2048 bit long modulus (2 primes)
. . .
. . .
e is 65537 (0x010001)
Da Sie nun über einen privaten Schlüssel verfügen, können Sie eine entsprechende CSR erstellen, wiederum mit dem Dienstprogramm openssl
. Sie werden aufgefordert, eine Reihe von Feldern wie Land, Bundesland und Stadt auszufüllen. Wenn Sie ein Feld leer lassen möchten, können Sie einen .
eingeben. Beachten Sie jedoch, dass es am besten ist, die richtigen Werte für Ihren Standort und Ihre Organisation zu verwenden, wenn es sich um eine reale CSR handelt:
- openssl req -new -key sammy-server.key -out sammy-server.req
Output. . .
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:New York
Locality Name (eg, city) [Default City]:New York City
Organization Name (eg, company) [Default Company Ltd]:DigitalOcean
Organizational Unit Name (eg, section) []:Community
Common Name (eg, your name or your server's hostname) []:sammy-server
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Wenn Sie diese Werte automatisch als Teil des openssl
-Aufrufs statt über die interaktive Eingabeaufforderung hinzufügen möchten, können Sie das Argument -subj
an OpenSSL übergeben. Achten Sie darauf, die hervorgehobenen Werte so zu bearbeiten, dass sie mit dem Standort, der Organisation und dem Servernamen für die Übung übereinstimmen:
- openssl req -new -key sammy-server.key -out server.req -subj \
- /C=US/ST=New\ York/L=New\ York\ City/O=DigitalOcean/OU=Community/CN=sammy-server
Zur Überprüfung des Inhalts einer CSR können Sie eine Anforderungsdatei mit openssl
einlesen und die darin enthaltenen Felder untersuchen:
- openssl req -in sammy-server.req -noout -subject
Outputsubject=C = US, ST = New York, L = New York City, O = DigitalOcean, OU = Community, CN = sammy-server
Wenn Sie mit dem Thema Ihrer Übungs-Zertifikatanforderung zufrieden sind, kopieren Sie die Datei sammy-server.req
mit scp
auf Ihren CA-Server:
- scp sammy-server.req sammy@your_ca_server_ip:/tmp/sammy-server.req
In diesem Schritt haben Sie eine Zertifikatsignaturanforderung für einen fiktiven Server namens sammy-server
erzeugt. In einem realen Szenario könnte die Anfrage z. B. von einem Staging- oder Entwicklungs-Webserver kommen, der ein TLS-Zertifikat zum Testen benötigt; oder sie könnte von einem OpenVPN-Server kommen, der ein Zertifikat anfordert, damit sich Benutzer mit einem VPN verbinden können. Im nächsten Schritt fahren wir mit dem Signieren der Zertifikatsignaturanforderung unter Verwendung des privaten Schlüssels des CA-Servers fort.
Im vorherigen Schritt haben Sie eine Übungs-Zertifikatanforderung und einen Übungsschlüssel für einen fiktiven Server erstellt. Sie kopierten sie in das Verzeichnis /tmp
auf Ihrem CA-Server und emulierten damit das Verfahren, das Sie verwenden würden, wenn Sie echte Clients oder Server hätten, die Ihnen CSR-Anfragen senden würden, die signiert werden müssen.
Um mit dem fiktiven Szenario fortzufahren, muss der CA-Server nun das Übungszertifikat importieren und signieren. Sobald eine Zertifikatanforderung von der CA validiert und an einen Server zurückgesendet wird, können Clients, die der Zertifizierungsstelle vertrauen, auch dem neu ausgestellten Zertifikat vertrauen.
Da wir innerhalb der PKI der CA arbeiten werden, in der das Dienstprogramm easy-rsa
verfügbar ist, werden die Signierungsschritte das Dienstprogramm easy-rsa
verwenden. Dies vereinfacht die Dinge im Gegensatz zur direkten Verwendung von openssl
, wie wir es im vorherigen Beispiel getan haben.
Der erste Schritt zum Signieren der fiktiven CSR besteht darin, die Zertifikatanforderung mithilfe des Skripts easy-rsa
zu importieren:
- cd ~/easy-rsa
- ./easyrsa import-req /tmp/sammy-server.req sammy-server
Output. . .
The request has been successfully imported with a short name of: sammy-server
You may now use this name to perform signing operations on this request.
Jetzt können Sie die Anfrage signieren, indem Sie das Skript easyrsa
mit der Option sign-req
ausführen, gefolgt vom Anfragetyp und dem Common Name, der in der CSR enthalten ist. Der Anfragetyp kann entweder Client
, Server
oder ca
sein. Da wir mit einem Zertifikat für einen fiktiven Server üben, stellen Sie sicher, dass Sie den Anfragetyp Server
verwenden:
- ./easyrsa sign-req server sammy-server
In der Ausgabe werden Sie zur Überprüfung aufgefordert, ob die Anfrage von einer vertrauenswürdigen Quelle stammt. Geben Sie yes
ein, und drücken Sie dann zur Bestätigung ENTER
:
OutputYou are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 3650 days:
subject=
commonName = sammy-server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
. . .
Certificate created at: /home/sammy/easy-rsa/pki/issued/sammy-server.crt
Wenn Sie Ihren CA-Schlüssel verschlüsselt haben, werden Sie an dieser Stelle zur Eingabe Ihres Passworts aufgefordert.
Nach Abschluss dieser Schritte haben Sie die CSR sammy-server.req
mit dem privaten Schlüssel des CA-Servers in /home/sammy/easy-rsa/pki/private/ca.key
signiert. Die resultierende Datei sammy-server.crt
enthält den öffentlichen Verschlüsselungsschlüssel des Übungsservers sowie eine neue Signatur des CA-Servers. Der Sinn der Signatur besteht darin, jedem, der der CA vertraut, mitzuteilen, dass auch dem sammy-server
-Zertifikat vertraut werden kann.
Wenn es sich bei dieser Anfrage um einen echten Server wie einen Web- oder VPN-Server handelt, würde der letzte Schritt auf dem CA-Server darin bestehen, die neuen Dateien sammy-server.crt
und ca.crt
vom CA-Server an den Remote-Server zu verteilen, der die CSR-Anfrage gestellt hat:
- scp pki/issued/sammy-server.crt sammy@your_server_ip:/tmp
- scp pki/ca.crt sammy@your_server_ip:/tmp
Zu diesem Zeitpunkt könnten Sie das ausgestellte Zertifikat mit beispielsweise einem Webserver, einem VPN, einem Konfigurationsmanagement-Tool, einem Datenbanksystem oder für die Client-Authentifizierung verwenden.
Gelegentlich kann es erforderlich sein, ein Zertifikat zu widerrufen, um zu verhindern, dass ein Benutzer oder Server es verwendet. Vielleicht wurde ein Laptop gestohlen, ein Webserver kompromittiert, oder ein Mitarbeiter oder ein Auftragnehmer hat Ihr Unternehmen verlassen.
Zum Widerrufen eines Zertifikats folgt der allgemeine Vorgang diesen Schritten:
./easyrsa revoke client_name
../easyrsa gen-crl
.crl.pem
auf den oder die Server, die sich auf Ihre CA verlassen, und kopieren Sie sie auf diesen Systemen in das oder die erforderlichen Verzeichnisse für Programme, die auf sie verweisen.Mit diesem Vorgang können Sie alle Zertifikate, die Sie zuvor ausgestellt haben, jederzeit widerrufen. In den folgenden Abschnitten gehen wir jeden Schritt im Detail durch, beginnend mit dem Befehl revoke
.
Um ein Zertifikat zu widerrufen, navigieren Sie zum Verzeichnis easy-rsa
auf Ihrem CA-Server:
- cd ~/easy-rsa
Führen Sie als Nächstes das Skript easyrsa
mit der Option revoke
aus, gefolgt von dem Client-Namen, den Sie widerrufen möchten. Dem obigen Übungsbeispiel folgend lautet der Common Name des Zertifikats sammy-server
:
- ./easyrsa revoke sammy-server
Sie werden dazu aufgefordert, das Sperren durch Eingabe von yes
zu bestätigen:
OutputPlease confirm you wish to revoke the certificate with the following subject:
subject=
commonName = sammy-server
Type the word 'yes' to continue, or any other input to abort.
Continue with revocation: yes
. . .
Revoking Certificate 8348B3F146A765581946040D5C4D590A
. . .
Beachten Sie den hervorgehobenen Wert in der Zeile Revoking Certificate
. Dieser Wert ist die eindeutige Seriennummer des Zertifikats, das widerrufen wird. Sie benötigen diesen Wert, wenn Sie die Widerrufsliste im letzten Schritt dieses Abschnitts prüfen möchten, um zu verifizieren, dass das Zertifikat darin enthalten ist.
Nach der Bestätigung der Aktion wird die CA das Zertifikat widerrufen. Entfernte Systeme, die sich auf die CA verlassen, haben jedoch keine Möglichkeit zur Überprüfung, ob Zertifikate widerrufen wurden. Benutzer und Server können das Zertifikat weiterhin verwenden, bis die Zertifikatswiderrufsliste (Certificate Revocation List, CRL) der CA an alle Systeme verteilt wird, die sich auf die CA verlassen.
Im nächsten Schritt erzeugen Sie eine CRL oder aktualisieren eine bestehende crl.pem
-Datei.
Nachdem Sie ein Zertifikat widerrufen haben, ist es jetzt wichtig, die Liste der widerrufenen Zertifikate auf Ihrem CA-Server zu aktualisieren. Sobald Sie über eine aktualisierte Widerrufsliste verfügen, können Sie feststellen, welche Benutzer und Systeme in Ihrer CA über gültige Zertifikate verfügen.
Um eine CRL zu erzeugen, führen Sie den Befehl easy-rsa
mit der Option gen-crl
aus, während Sie sich noch im Verzeichnis ~/easy-rsa
befinden:
- ./easyrsa gen-crl
Wenn Sie bei der Erstellung Ihrer Datei ca.key
eine Passphrase verwendet haben, werden Sie aufgefordert, diese einzugeben. Der Befehl gen-crl
erzeugt eine Datei namens crl.pem
, die die aktualisierte Liste der widerrufenen Zertifikate für diese CA enthält.
Als Nächstes müssen Sie jedes Mal, wenn Sie den Befehl gen-crl
ausführen, die aktualisierte Datei crl.pem
an alle Server und Clients übertragen, die auf diese CA angewiesen sind. Andernfalls können die Clients und Systeme weiterhin auf Dienste und Systeme zugreifen, die Ihre CA verwenden, da diese Dienste über den widerrufenen Status des Zertifikats informiert sein müssen.
Nachdem Sie nun eine CRL auf Ihrem CA-Server erzeugt haben, müssen Sie sie an Remote-Systeme übertragen, die sich auf Ihre CA verlassen. Um diese Datei auf Ihre Server zu übertragen, können Sie den Befehl scp
verwenden.
Anmerkung: In diesem Tutorial wird erklärt, wie eine CRL manuell erzeugt und verteilt wird. Es gibt zwar robustere und automatisierte Methoden zur Verteilung und Überprüfung von Widerrufslisten wie OCSP-Stapling, aber die Konfiguration dieser Methoden sprengt den Rahmen dieses Artikels.
Stellen Sie sicher, dass Sie bei Ihrem CA-Server als non-root user angemeldet sind, und führen Sie die folgenden Schritte aus, wobei Sie an Stelle von your_server_ip
Ihre eigene Server-IP oder Ihren eigenen DNS-Namen eingeben:
- scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp
Da sich die Datei nun auf dem Remote-System befindet, besteht der letzte Schritt darin, alle Dienste mit der neuen Kopie der Widerrufsliste zu aktualisieren.
Die Liste der Schritte, die Sie zur Aktualisierung von Diensten verwenden müssen, die die Datei crl.pem
verwenden, geht über den Umfang dieses Tutorials hinaus. Im Allgemeinen müssen Sie die Datei crl.pem
an den Speicherort kopieren, den der Dienst erwartet, und sie dann mit systemctl
neu starten.
Sobald Sie Ihre Dienste mit der neuen crl.pem
-Datei aktualisiert haben, sind Ihre Dienste in der Lage, Verbindungen von Clients oder Servern abzulehnen, die ein widerrufenes Zertifikat verwenden.
Wenn Sie eine CRL-Datei überprüfen möchten, z. B. um eine Liste widerrufener Zertifikate zu bestätigen, verwenden Sie den folgenden openssl
-Befehl aus Ihrem easy-rsa
-Verzeichnis auf Ihrem CA-Server:
- cd ~/easy-rsa
- openssl crl -in pki/crl.pem -noout -text
Sie können diesen Befehl auch auf jedem Server oder System ausführen, auf dem das openssl
-Tool mit einer Kopie der Datei crl.pem
installiert ist. Wenn Sie beispielsweise die Datei crl.pem
auf Ihr zweites System übertragen haben und überprüfen möchten, ob das Zertifikat sammy-server
widerrufen wurde, können Sie einen openssl
-Befehl wie den folgenden verwenden, wobei Sie die Seriennummer, die Sie zuvor beim Widerruf des Zertifikats notiert haben, an Stelle der hier markierten verwenden:
- openssl crl -in /tmp/crl.pem -noout -text |grep -A 1 8348B3F146A765581946040D5C4D590A
Output Serial Number: 8348B3F146A765581946040D5C4D590A
Revocation Date: Apr 1 20:48:02 2020 GMT
Beachten Sie, wie der Befehl grep
verwendet wird, um die eindeutige Seriennummer zu überprüfen, die Sie im Widerrufsschritt notiert haben. Jetzt können Sie den Inhalt Ihrer Zertifikatswiderrufsliste auf jedem System überprüfen, das darauf angewiesen ist, den Zugriff auf Benutzer und Dienste einzuschränken.
In diesem Tutorial haben Sie eine private Zertifizierungsstelle mit dem Easy-RSA-Paket auf einem eigenständigen Debian 10-Server erstellt. Sie haben gelernt, wie das Vertrauensmodell zwischen Parteien funktioniert, die sich auf die CA verlassen. Sie haben auch eine Zertifikatsignaturanforderung (Certificate Signing Request, CSR) für einen Übungsserver erstellt und signiert und dann gelernt, wie man ein Zertifikat widerruft. Abschließend haben Sie erfahren, wie Sie eine Zertifikatswiderrufsliste (Certificate Revocation List, CRL) für jedes System erstellen und verteilen, das auf Ihre CA angewiesen ist, um sicherzustellen, dass Benutzer oder Server, die nicht auf Dienste zugreifen sollen, daran gehindert werden.
Jetzt können Sie Zertifikate für Benutzer ausgeben und sie mit Diensten wie OpenVPN verwenden. Sie können Ihre CA auch verwenden, um Entwicklungs- und Staging-Webserver mit Zertifikaten zu konfigurieren, um Ihre Nicht-Produktionsumgebungen zu sichern. Die Verwendung einer CA mit TLS-Zertifikaten während der Entwicklung kann dazu beitragen, sicherzustellen, dass Ihr Code und Ihre Umgebungen so gut wie möglich zu Ihrer Produktionsumgebung passen.
Wenn Sie mehr über die Verwendung von OpenSSL erfahren möchten, bietet unser Tutorial OpenSSL-Grundlagen: Arbeiten mit SSL-Zertifikaten, privaten Schlüsseln und CSRs viele zusätzliche Informationen, die Ihnen helfen, sich mit den OpenSSL-Grundlagen vertraut zu machen.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!