Einrichten und Konfigurieren einer Zertifizierungsstelle (CA) unter Ubuntu 20.04
Einführung
Eine Zertifizierungsstelle (CA) ist eine Einrichtung, die für die Ausstellung digitaler Zertifikate zur Überprüfung von Identitäten im Internet zuständig ist. Obwohl öffentliche CAs eine beliebte Wahl für die Überprüfung der Identität von Websites und anderen Diensten sind, die der Öffentlichkeit zur Verfügung gestellt werden, werden private CAs typischerweise für geschlossene Gruppen und private Dienste verwendet.
Die Einrichtung 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 Zertifizierungsstelle können Sie Zertifikate für Benutzer, Server oder einzelne Programme und Dienste innerhalb Ihrer Infrastruktur ausstellen.
Ein paar Beispiele für Programme unter Linux, die ihre eigene private Zertifizierungsstelle verwenden, sind OpenVPN und Puppet . Sie können auch Ihren Webserver so konfigurieren, dass er Zertifikate verwendet, die von einer privaten Zertifizierungsstelle ausgestellt wurden, damit Entwicklungs- und Staging-Umgebungen mit Produktionsservern übereinstimmen, die TLS zur Verschlüsselung von Verbindungen verwenden.
In dieser Anleitung erfahren Sie, wie Sie eine private Zertifizierungsstelle auf einem Ubuntu 20.04-Server einrichten und wie Sie ein Testzertifikat mit Ihrer neuen Zertifizierungsstelle erstellen und signieren. Außerdem erfahren Sie, wie Sie das öffentliche Zertifikat des CA-Servers in den Zertifikatspeicher Ihres Betriebssystems importieren, damit Sie die Vertrauenskette zwischen der CA und den Remote-Servern oder -Benutzern überprüfen können. Schließlich lernen Sie, wie Sie Zertifikate widerrufen und eine Zertifikatssperrliste verteilen, um sicherzustellen, dass nur autorisierte Benutzer und Systeme Dienste nutzen können, die sich auf Ihre CA stützen.
Voraussetzungen
Um dieses Tutorial abzuschließen, benötigen Sie Zugang zu einem Ubuntu 20.04-Server, auf dem Sie Ihren CA-Server hosten. Bevor Sie mit dieser Anleitung beginnen, müssen Sie einen Nicht-Root-Benutzer mit sudo
-Rechten konfigurieren. Sie können unserer Anleitung zur Ersteinrichtung eines Ubuntu 20.04-Servers folgen, um einen Benutzer mit den entsprechenden Rechten einzurichten. In der verlinkten Anleitung wird auch eine Firewall eingerichtet, die in dieser Anleitung als vorhanden vorausgesetzt wird.
Dieser Server wird in dieser Anleitung 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 Zertifikatsanforderungen verwendet. Er sollte keine anderen Dienste ausführen und idealerweise offline oder komplett heruntergefahren sein, wenn Sie nicht aktiv mit Ihrer CA arbeiten.
Hinweis: Der letzte Abschnitt dieses Tutorials ist optional, wenn Sie das Signieren und Widerrufen von Zertifikaten lernen möchten. Wenn Sie diese Übungsschritte durchführen möchten, benötigen Sie einen zweiten Ubuntu 20.04-Server oder Sie können auch Ihren eigenen lokalen Linux-Computer mit Ubuntu oder Debian oder davon abgeleiteten Distributionen verwenden.
Schritt 1 – Installation von Easy-RSA
Die erste Aufgabe in diesem Tutorial ist die Installation der easy-rsa
-Skripte auf Ihrem CA-Server. easy-rsa
ist ein Tool zur Verwaltung von Zertifizierungsstellen, mit dem Sie einen privaten Schlüssel und ein öffentliches Stammzertifikat generieren können, die Sie dann zum Signieren von Anfragen von Clients und Servern verwenden, die sich auf Ihre CA verlassen.
Melden Sie sich bei Ihrem CA-Server als sudo-Benutzer an, der nicht root ist und den Sie während der anfänglichen Setup-Schritte 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.
Jetzt haben Sie alles, was Sie brauchen, um Easy-RSA zu verwenden, eingerichtet. Im nächsten Schritt erstellen Sie eine Infrastruktur für öffentliche Schlüssel und beginnen dann mit dem Aufbau Ihrer Zertifizierungsstelle.
Schritt 2 – Vorbereiten eines Verzeichnisses für eine Infrastruktur für öffentliche Schlüssel
Nachdem Sie easy-rsa
installiert haben, ist es nun an der Zeit, ein Skelett für eine Infrastruktur für öffentliche Schlüssel (PKI) auf dem CA-Server zu erstellen. Stellen Sie sicher, dass Sie immer noch als Nicht-Root-Benutzer angemeldet sind und erstellen Sie ein easy-rsa
-Verzeichnis. Stellen Sie sicher, dass Sie keinen der folgenden Befehle mit sudo ausführen, da Ihr normaler Benutzer die CA ohne erweiterte Rechte verwalten und mit ihr interagieren sollte.
- mkdir ~/easy-rsa
Dadurch wird ein neues Verzeichnis namens easy-rsa
in Ihrem Home-Ordner erstellt. In diesem Verzeichnis erstellen wir symbolische Links, die auf die easy-rsa
-Paketdateien verweisen, die wir im vorherigen 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/
Hinweis: Während andere Anleitungen Sie anweisen, die easy-rsa
-Paketdateien in Ihr PKI-Verzeichnis zu kopieren, wird in dieser Anleitung ein Symlink-Ansatz gewählt. Daher werden alle Aktualisierungen des Pakets easy-rsa
automatisch in den Skripten Ihrer PKI berücksichtigt.
Um den Zugriff auf Ihr neues PKI-Verzeichnis einzuschränken, stellen Sie sicher, dass nur der Eigentümer darauf zugreifen kann, indem Sie den Befehl chmod
verwenden:
- chmod 700 /home/sammy/easy-rsa
Schließlich initialisieren Sie die PKI im Verzeichnis easy-rsa
:
- 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
Nach Abschluss dieses Abschnitts verfügen Sie über ein Verzeichnis, das alle Dateien enthält, die zum Erstellen einer Zertifizierungsstelle erforderlich sind. Im nächsten Abschnitt werden Sie den privaten Schlüssel und das öffentliche Zertifikat für Ihre Zertifizierungsstelle erstellen.
Schritt 3 – Erstellen einer Zertifizierungsstelle
Bevor Sie den privaten Schlüssel und das Zertifikat Ihrer Zertifizierungsstelle erstellen können, müssen Sie eine Datei namens vars
mit einigen Standardwerten erstellen und füllen. Zuerst legen Sie cd
im Verzeichnis easy-rsa
ab, dann erstellen und bearbeiten Sie die Datei vars
mit nano
oder Ihrem bevorzugten Texteditor:
- cd ~/easy-rsa
- nano vars
Nach dem Öffnen der Datei fügen Sie die folgenden Zeilen ein und bearbeiten jeden hervorgehobenen Wert, um Ihre eigenen Organisationsdaten wiederzugeben. Wichtig ist dabei, 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 "[email protected]"set_var EASYRSA_REQ_OU "Community"set_var EASYRSA_ALGO "ec"set_var EASYRSA_DIGEST "sha512"
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Wenn Sie nano
verwenden, können Sie dies tun, indem Sie CTRL+X
, dann Y
und ENTER
zur Bestätigung drücken. Jetzt können Sie Ihre Zertifizierungsstelle erstellen.
Um das Paar aus öffentlichem und privatem Stammschlüssel 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 Sie werden aufgefordert, eine Passphrase für Ihr Schlüsselpaar einzugeben. Achten Sie darauf, eine sichere 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, z. B. um ein Zertifikat zu signieren oder zu widerrufen.
Sie werden auch aufgefordert, den Common Name (CN) für Ihre CA zu bestätigen. Der CN ist der Name, der im Zusammenhang mit der Zertifizierungsstelle auf diesen Rechner verweist. Sie können eine beliebige Zeichenfolge für den Common Name der CA eingeben, aber der Einfachheit halber drücken Sie 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) :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
Hinweis: Wenn Sie nicht jedes Mal, wenn Sie mit Ihrer Zertifizierungsstelle interagieren, nach einem Kennwort gefragt 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 sich zu vergewissern, dass sie Teil desselben Vertrauensnetzes 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 ein System ausgibt und einen Man-in-the-middle-Angriff durchführt. -
ca.key
ist der private Schlüssel, den die CA verwendet, um Zertifikate für Server und Clients zu signieren. Wenn ein Angreifer Zugang zu Ihrer CA und damit auch zu Ihrerca.key
-Datei erhält, müssen Sie Ihre CA zerstören. Aus diesem Grund sollte sich Ihreca.key
-Datei nur auf Ihrem CA-Rechner befinden und Ihr CA-Rechner sollte idealerweise als zusätzliche Sicherheitsmaßnahme offline gehalten werden, wenn er keine Zertifikatsanforderungen signiert.
Damit ist Ihre CA eingerichtet und kann zum Signieren von Zertifikatsanforderungen und zum Widerrufen von Zertifikaten verwendet werden.
Schritt 4 – Verteilen des öffentlichen Zertifikats Ihrer Zertifizierungsstelle
Jetzt ist Ihre Zertifizierungsstelle konfiguriert und bereit, als Root of Trust für alle Systeme zu fungieren, die Sie für ihre Verwendung konfigurieren möchten. Sie können das Zertifikat der Zertifizierungsstelle zu Ihren OpenVPN-Servern, Webservern, Mailservern 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 ca.crt
-Datei in den Zertifikatspeicher seines Betriebssystems importiert haben.
Um das öffentliche Zertifikat der CA in ein zweites Linux-System wie einen anderen Server oder einen lokalen Computer zu importieren, erhalten Sie 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 einfügen, der das Zertifikat importiert. Sie können auch Tools wie scp
, rsync
verwenden, um die Datei zwischen Systemen zu übertragen. In diesem Schritt verwenden wir jedoch Kopieren und Einfügen mit nano
, da dies auf allen Systemen funktioniert.
Führen Sie als Nicht-Root-Benutzer auf dem CA-Server den folgenden Befehl aus:
- cat ~/easy-rsa/pki/ca.crt
Im Terminal wird eine Ausgabe ähnlich der folgenden angezeigt:
Output-----BEGIN CERTIFICATE-----MIIDSzCCAjOgAwIBAgIUcR9Crsv3FBEujrPZnZnU4nSb5TMwDQYJKoZIhvcNAQELBQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjAwMzE4MDMxNjI2WhcNMzAw. . .. . .-----END CERTIFICATE-----
Kopieren Sie alles, einschließlich der Zeilen -----BEGIN CERTIFICATE-----
und -----END CERTIFICATE-----
und der Bindestriche.
Auf Ihrem zweiten Linux-System öffnen Sie mit nano
oder Ihrem bevorzugten Texteditor eine Datei mit dem Namen /tmp/ca.crt
:
- nano /tmp/ca.crt
Fügen Sie den Inhalt, den Sie gerade vom CA-Server kopiert haben, in den Editor ein. Wenn Sie fertig sind, speichern und schließen Sie die Datei. Wenn Sie nano
verwenden, können Sie dies tun, indem Sie CTRL+X
, dann Y
und ENTER
zur Bestätigung drücken.
Nun, da Sie eine Kopie der ca.crt
-Datei auf Ihrem zweiten Linux-System haben, ist es an der Zeit, das Zertifikat in den Zertifikatspeicher des Betriebssystems zu importieren.
Auf Ubuntu- und Debian-basierten Systemen führen Sie die folgenden Befehle als Nicht-Root-Benutzer aus, um das Zertifikat zu importieren:
- sudo cp /tmp/ca.crt /usr/local/share/ca-certificates/
- sudo 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 ihn wie im vorherigen Beispiel in eine Datei namens /tmp/ca.crt
ein. Als Nächstes kopieren Sie das Zertifikat nach /etc/pki/ca-trust/source/anchors/
und führen dann den Befehl update-ca-trust
aus.
- sudo cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/
- sudo update-ca-trust
Jetzt wird Ihr zweites Linux-System jedem Zertifikat vertrauen, das vom CA-Server signiert wurde.
Hinweis: Wenn Sie Ihre CA mit Webservern verwenden und Firefox als Browser einsetzen, müssen Sie das öffentliche ca.crt
-Zertifikat direkt in Firefox importieren. Firefox verwendet nicht den lokalen Zertifikatspeicher des Betriebssystems. Details zum Hinzufügen des Zertifikats Ihrer Zertifizierungsstelle zu Firefox finden Sie in diesem Support-Artikel von Mozilla zum Einrichten von Zertifizierungsstellen (CAs) in Firefox.
Wenn Sie Ihre CA zur Integration in eine Windows-Umgebung oder Desktop-Computer verwenden, lesen Sie bitte die Dokumentation zur Verwendung von certutil.exe
, um ein CA-Zertifikat zu installieren.
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 über das Signieren und Widerrufen von Zertifikaten erfahren möchten, werden die folgenden optionalen Abschnitte jeden Prozess im Detail erklären.
(Optional) – Erstellen von Zertifikatsignierungsanfragen und Widerrufen von Zertifikaten
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 die anderen Tutorials verwenden können. Sie können die ca.crt
-Datei Ihrer Zertifizierungsstelle importieren und Zertifikate in Ihrem Netzwerk überprüfen, die von Ihrer Zertifizierungsstelle signiert wurden.
Wenn Sie üben und mehr über das Signieren von Zertifikatsanfragen und das Widerrufen von Zertifikaten erfahren möchten, erklären diese optionalen Abschnitte, wie beide Prozesse funktionieren.
(Optional) – Erstellen und Signieren einer Übungszertifikatsanforderung
Nachdem Sie nun eine CA zur Verfügung haben, können Sie die Erzeugung eines privaten Schlüssels und einer Zertifikatsanforderung üben, um sich mit dem Signier- und Verteilungsprozess vertraut zu machen.
Eine Zertifikatsanforderung (CSR) besteht aus drei Teilen: einem öffentlichen Schlüssel, identifizierenden Informationen über das anfordernde System und einer Signatur der Anforderung selbst, die mit dem privaten Schlüssel der anfordernden Partei erstellt wird. Der private Schlüssel wird geheim gehalten und wird verwendet, um Informationen zu verschlüsseln, die jeder mit dem signierten öffentlichen Zertifikat entschlüsseln kann.
Die folgenden Schritte werden auf Ihrem zweiten Ubuntu- oder Debian-System oder einer davon abgeleiteten Distribution ausgeführt. Dabei kann es sich um einen anderen Remote-Server oder um einen lokalen Linux-Rechner wie einen Laptop oder einen Desktop-Computer handeln. Da easy-rsa
nicht auf allen Systemen standardmäßig verfügbar ist, werden wir das Tool openssl
verwenden, um einen privaten Schlüssel und ein Zertifikat für die Praxis zu erstellen.
openssl
ist normalerweise auf den meisten Linux-Distributionen standardmäßig installiert, aber um sicherzugehen, führen Sie Folgendes auf Ihrem System aus:
- sudo apt update
- sudo apt install openssl
Wenn Sie aufgefordert werden, openssl
zu installieren, geben Sie y
ein, um mit den Installationsschritten fortzufahren. Jetzt können Sie mit openssl
eine praktische CSR erstellen.
Der erste Schritt, den Sie zum Erstellen einer CSR ausführen müssen, ist die Erstellung eines privaten Schlüssels. Um einen privaten Schlüssel mit openssl
zu erstellen, legen Sie ein practice-csr
-Verzeichnis an und generieren dann einen Schlüssel darin. Wir werden diese Anforderung für einen fiktiven Server namens sammy-server
stellen, im Gegensatz zur Erstellung eines Zertifikats, das zur Identifizierung eines Benutzers oder einer anderen Zertifizierungsstelle 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)
Nachdem Sie nun einen privaten Schlüssel haben, können Sie eine entsprechende CSR erstellen, wiederum mit dem Dienstprogramm openssl
. Sie werden aufgefordert, eine Reihe von Feldern wie Land, Staat und Stadt auszufüllen. Sie können ein .
eingeben, wenn Sie ein Feld leer lassen möchten, aber bedenken Sie, dass es bei einer echten CSR am besten ist, die richtigen Werte für Ihren Standort und Ihre Organisation zu verwenden:
- openssl req -new -key sammy-server.key -out sammy-server.req
Output. . .-----Country Name (2 letter code) :USState or Province Name (full name) :New YorkLocality Name (eg, city) :New York CityOrganization Name (eg, company) :DigitalOceanOrganizational Unit Name (eg, section) :CommunityCommon Name (eg, your name or your server's hostname) :sammy-serverEmail Address :Please enter the following 'extra' attributesto be sent with your certificate requestA 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 markierten Werte so zu bearbeiten, dass sie mit Ihrem Praxisstandort, Ihrer Organisation und Ihrem Servernamen ü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
Um den Inhalt einer CSR zu überprüfen, 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 Betreff Ihrer Praxiszertifikatsanforderung zufrieden sind, kopieren Sie die sammy-server.req
-Datei 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 Certificate Signing Request für einen fiktiven Server namens sammy-server
erstellt. In einem realen Szenario könnte die Anforderung 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 Benutzer eine Verbindung zu einem VPN herstellen können. Im nächsten Schritt wird die Zertifikatssignierungsanforderung mit dem privaten Schlüssel des CA-Servers signiert.
(Optional) – Signieren einer CSR
Im vorherigen Schritt haben Sie eine praktische Zertifikatsanforderung und einen Schlüssel für einen fiktiven Server erstellt. Sie haben sie in das Verzeichnis /tmp
auf Ihrem CA-Server kopiert und damit den Prozess nachgeahmt, den Sie verwenden würden, wenn Sie echte Clients oder Server hätten, die Ihnen CSR-Anforderungen senden, die signiert werden müssen.
Um mit dem fiktiven Szenario fortzufahren, muss der CA-Server nun das Übungszertifikat importieren und es signieren. Sobald eine Zertifikatsanforderung von der CA validiert und an einen Server weitergeleitet wurde, können Clients, die der Zertifizierungsstelle vertrauen, auch dem neu ausgestellten Zertifikat vertrauen.
Da wir innerhalb der PKI der CA arbeiten, in der das Dienstprogramm easy-rsa
zur Verfügung steht, werden die Signierungsschritte zur Vereinfachung das Dienstprogramm easy-rsa
verwenden, im Gegensatz zur direkten Verwendung des Dienstprogramms openssl
, wie wir es im vorherigen Beispiel getan haben.
Der erste Schritt zum Signieren der fiktiven CSR besteht darin, die Zertifikatsanforderung mit dem Skript 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-serverYou may now use this name to perform signing operations on this request.
Jetzt können Sie die Anforderung signieren, indem Sie das Skript easyrsa
mit der Option sign-req
ausführen, gefolgt von dem Anforderungstyp und dem Common Name, der in der CSR enthalten ist. Der Anforderungstyp kann entweder client
, server
oder ca
sein. Da wir mit einem Zertifikat für einen fiktiven Server üben, sollten Sie den Anforderungstyp server
verwenden:
- ./easyrsa sign-req server sammy-server
In der Ausgabe werden Sie aufgefordert zu überprüfen, ob die Anforderung aus einer vertrauenswürdigen Quelle stammt. Geben Sie yes
ein und drücken Sie ENTER
, um dies zu bestätigen:
OutputYou are about to sign the following certificate.Please check over the details shown below for accuracy. Note that this requesthas not been cryptographically verified. Please be sure it came from a trustedsource 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-serverType 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 Kennworts aufgefordert.
Wenn diese Schritte abgeschlossen sind, haben Sie die sammy-server.req
CSR mit dem privaten Schlüssel des CA-Servers in /home/sammy/easy-rsa/pki/private/ca.key
signiert. Die resultierende sammy-server.crt
-Datei enthält den öffentlichen Verschlüsselungsschlüssel des Praxisservers sowie eine neue Signatur des CA-Servers. Der Sinn der Signatur besteht darin, jedem, der der CA vertraut, zu sagen, dass er auch dem sammy-server
-Zertifikat vertrauen kann.
Wenn diese Anforderung für einen echten Server wie einen Webserver oder VPN-Server wäre, würde der letzte Schritt auf dem CA-Server darin bestehen, die neuen sammy-server.crt
– und ca.crt
-Dateien vom CA-Server an den Remote-Server zu verteilen, der die CSR-Anforderung gestellt hat:
- scp pki/issued/sammy-server.crt sammy@your_server_ip:/tmp
- scp pki/ca.crt sammy@your_server_ip:/tmp
An diesem Punkt könnten Sie das ausgestellte Zertifikat mit einem Webserver, einem VPN, einem Konfigurationsmanagement-Tool, einem Datenbanksystem oder für die Authentifizierung von Clients verwenden.
(Optional) – Widerruf eines Zertifikats
Gelegentlich kann es notwendig sein, ein Zertifikat zu widerrufen, um zu verhindern, dass ein Benutzer oder Server es verwendet. Vielleicht wurde der Laptop eines Benutzers gestohlen, ein Webserver wurde kompromittiert oder ein Mitarbeiter oder Auftragnehmer hat Ihre Organisation verlassen.
Um ein Zertifikat zu widerrufen, gehen Sie im Allgemeinen wie folgt vor:
- Widerrufen Sie das Zertifikat mit dem Befehl
./easyrsa revoke client_name
. - Erstellen Sie eine neue CRL mit dem Befehl
./easyrsa gen-crl
. - Übertragen Sie die aktualisierte Datei
crl.pem
auf den oder die Server, die auf Ihre CA angewiesen sind, und kopieren Sie sie auf diesen Systemen in das oder die erforderlichen Verzeichnisse für Programme, die darauf verweisen. - Starten Sie alle Dienste neu, die Ihre CA und die CRL-Datei verwenden.
Mit diesem Verfahren können Sie jederzeit alle Zertifikate widerrufen, die Sie zuvor ausgestellt haben. In den folgenden Abschnitten werden die einzelnen Schritte detailliert erläutert, beginnend mit dem Befehl revoke
.
Zertifikat widerrufen
Um ein Zertifikat zu widerrufen, navigieren Sie zum Verzeichnis easy-rsa
auf Ihrem CA-Server:
- cd ~/easy-rsa
Als Nächstes führen Sie das Skript easyrsa
mit der Option revoke
aus, gefolgt von dem Client-Namen, den Sie widerrufen möchten. Im obigen Beispiel lautet der Common Name des Zertifikats sammy-server
:
- ./easyrsa revoke sammy-server
Sie werden aufgefordert, den Widerruf zu bestätigen, indem Sie yes
:
OutputPlease confirm you wish to revoke the certificate with the following subject:subject= commonName = sammy-serverType the word 'yes' to continue, or any other input to abort. Continue with revocation: yes. . .Revoking Certificate 8348B3F146A765581946040D5C4D590A. . .
Beachten Sie den markierten Wert in der Zeile Revoking Certificate
. Dieser Wert ist die eindeutige Seriennummer des Zertifikats, das widerrufen wird. Wenn Sie im letzten Schritt dieses Abschnitts die Sperrliste prüfen möchten, um sicherzustellen, dass das Zertifikat darin enthalten ist, benötigen Sie diesen Wert.
Nach der Bestätigung der Aktion widerruft die CA das Zertifikat. Entfernte Systeme, die sich auf die CA verlassen, haben jedoch keine Möglichkeit zu überprüfen, ob Zertifikate widerrufen wurden. Benutzer und Server können das Zertifikat weiterhin verwenden, bis die Zertifikatswiderrufsliste (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 vorhandene crl.pem
-Datei.
Erzeugen einer Zertifikatswiderrufsliste
Nachdem Sie ein Zertifikat widerrufen haben, ist es wichtig, die Liste der widerrufenen Zertifikate auf Ihrem CA-Server zu aktualisieren. Sobald Sie über eine aktualisierte Sperrliste verfügen, können Sie feststellen, welche Benutzer und Systeme über gültige Zertifikate in Ihrer CA verfügen.
Um eine CRL zu generieren, 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 ca.key
-Datei eine Passphrase verwendet haben, werden Sie aufgefordert, diese einzugeben. Der Befehl gen-crl
erzeugt eine Datei mit dem Namen crl.pem
, die die aktualisierte Liste der widerrufenen Zertifikate für diese CA enthält.
Nachdem Sie den Befehl gen-crl
ausgeführt haben, müssen Sie die aktualisierte Datei crl.pem
an alle Server und Clients übertragen, die sich auf diese CA verlassen. Andernfalls können Clients und Systeme immer noch auf Dienste und Systeme zugreifen, die Ihre CA verwenden, da diese Dienste über den widerrufenen Status des Zertifikats informiert sein müssen.
Übertragen einer Zertifikatswiderrufsliste
Nachdem Sie nun eine CRL auf Ihrem CA-Server erstellt haben, müssen Sie diese auf entfernte Systeme übertragen, die auf Ihre CA angewiesen sind. Um diese Datei auf Ihre Server zu übertragen, können Sie den Befehl scp
verwenden.
Hinweis: In diesem Tutorial wird erklärt, wie Sie eine CRL manuell erstellen und verteilen. Es gibt zwar robustere und automatisierte Methoden zur Verteilung und Überprüfung von Sperrlisten wie OCSP-Stapling, aber die Konfiguration dieser Methoden geht über den Rahmen dieses Artikels hinaus.
Stellen Sie sicher, dass Sie bei Ihrem CA-Server als Nicht-Root-Benutzer angemeldet sind, und führen Sie den folgenden Befehl aus, wobei Sie die IP-Adresse oder den DNS-Namen Ihres eigenen Servers anstelle von your_server_ip
einsetzen:
- scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp
Nachdem sich die Datei auf dem entfernten System befindet, besteht der letzte Schritt darin, alle Dienste mit der neuen Kopie der Sperrliste zu aktualisieren.
Aktualisierung von Diensten, die eine CRL unterstützen
Die Auflistung der Schritte, die Sie zur Aktualisierung von Diensten, die die crl.pem
-Datei verwenden, durchführen müssen, würde den Rahmen dieses Tutorials sprengen. Im Allgemeinen müssen Sie die crl.pem
-Datei an den Ort kopieren, den der Dienst erwartet, und ihn dann mit systemctl
neu starten.
Wenn Sie Ihre Dienste mit der neuen crl.pem
-Datei aktualisiert haben, können Ihre Dienste Verbindungen von Clients oder Servern ablehnen, die ein widerrufenes Zertifikat verwenden.
Untersuchung und Überprüfung des Inhalts einer CRL
Wenn Sie eine CRL-Datei untersuchen möchten, um beispielsweise eine Liste gesperrter Zertifikate zu bestätigen, verwenden Sie den folgenden openssl
-Befehl aus dem Verzeichnis easy-rsa
auf Ihrem CA-Server:
- cd ~/easy-rsa
- openssl crl -in pki/crl.pem -noout -text
Sie können diesen Befehl auch auf einem beliebigen Server oder System ausführen, auf dem das openssl
-Tool mit einer Kopie der crl.pem
-Datei installiert ist. Wenn Sie beispielsweise die crl.pem
-Datei auf Ihr zweites System übertragen haben und überprüfen möchten, ob das sammy-server
-Zertifikat 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, anstelle der hervorgehobenen Nummer einsetzen:
- 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 grep
-Befehl verwendet wird, um nach der eindeutigen Seriennummer zu suchen, die Sie beim Schritt des Widerrufs notiert haben. Jetzt können Sie den Inhalt Ihrer Zertifikatswiderrufsliste auf jedem System überprüfen, das darauf angewiesen ist, um den Zugriff auf Benutzer und Dienste zu beschränken.
Abschluss
In diesem Tutorial haben Sie eine private Zertifizierungsstelle mit dem Easy-RSA-Paket auf einem eigenständigen Ubuntu 20.04-Server erstellt. Sie haben gelernt, wie das Vertrauensmodell zwischen Parteien funktioniert, die sich auf die CA verlassen. Außerdem haben Sie eine Certificate Signing Request (CSR) für einen Praxisserver erstellt und signiert und gelernt, wie man ein Zertifikat widerruft. Schließlich haben Sie gelernt, wie Sie eine Certificate Revocation List (CRL) für jedes System, das sich auf Ihre CA verlässt, erstellen und verteilen, um sicherzustellen, dass Benutzer oder Server, die nicht auf Dienste zugreifen sollten, daran gehindert werden.
Jetzt können Sie Zertifikate für Benutzer ausstellen 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 produktiven Umgebungen zu sichern. Die Verwendung einer CA mit TLS-Zertifikaten während der Entwicklung kann dazu beitragen, dass Ihr Code und Ihre Umgebungen so weit wie möglich mit Ihrer Produktionsumgebung übereinstimmen.
Wenn Sie mehr über die Verwendung von OpenSSL erfahren möchten, lesen Sie unsere OpenSSL Essentials: Arbeiten mit SSL-Zertifikaten, privaten Schlüsseln und CSRs enthält viele zusätzliche Informationen, die Ihnen helfen, sich mit den OpenSSL-Grundlagen vertraut zu machen.