Zertifikate für Webserver erstellen und anwenden

Unser Ziel ist es, Zertifikate für firmeninterne Web-Dienste zu erstellen.
Wir haben ein Firmen-Netz in einer Domäne: firma.lan, damit haben wir auch einen internen DNS-Server.
Auf einem Linux-Server installieren wir Apache2 und konfigurieren wir ihn für die WEB-Dienste.

Sollten wir vorhaben, mehrere interne Web-Server zu betreiben, sollten wir für die Erstellung der Zertifikate einen verwenden. Zertifikate für bestimmte interne Domain werden auf dem, sagen wir Master Server erstellt und signiert, danach werden die auf andere Server kopiert. Als Beispiel erstellen wir ein Zertifikat für die Domain mydomain1.firma.lan.

Punkt
Im erstem Schritt erstellen wir ein Ordner in dem die Zertifikate gespeichert werden und wir wechseln zu diesem Ordner

 

# mkdir /etc/apache2/cert
# cd /etc/apache2/cert
Punkt
Wir spielen die Zertifizierungsstelle.
Zuerst erstellen wir ein CA Zertifikat (Certificate Authority) und wird unter dem Dateinamen myCA.crt gespeichert. Das wird unser Stammzertifikat sein.
Mit diesem Zertifikat werden alle ausgestellte Zertifikate bestätigt. Wir sollten uns auf jeden Fall das Passwort gut merken. Das Passwort wird bei der Signierung der Serverzertifikate gebraucht.

Mit dem folgenden Befehl wird zuerst ein Key erstellt.

 

# openssl genrsa -des3 -out myCA.key 4096

 

Im nächsten Schritt wird dann das eigentliche Zertifikat für unsere CA erstellt, gültig für 10 Jahre.

 

# openssl req -x509 -new -nodes -key myCA.key -sha256 -days 3650 -out myCA.crt


Hier sollten wir ein paar Daten eintragen. Das sind z.B. meine Daten.

 

ountry Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Bayern
Locality Name (eg, city) []:Stein
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MBS-IT
Organizational Unit Name (eg, section) []:MBS-IT-Security
Common Name (e.g. server FQDN or YOUR name) []:MBS
Email Address []:admin@mydomain1.firma.lan
Punkt
Als Nächstes erstellen wir ein Zertifikat für die gewünschte Domain mydomain1.firma.lan. Wir sollten hier bestimmten Regeln folgen, damit wir auch das richtige Zertifikat nach der Erstellung finden. Die Dateinamen sollten am besten so wie die Domainnamen heißen.

Zuerst wird ein privater Key erstellt

 

# openssl genrsa -out mydomain1.firma.lan.key 4096

 

Punkt
CSR (Certificate Signing Request) wird erstellt.

 

# openssl req -new -key mydomain1.firma.lan.key -out mydomain1.firma.lan.csr

 

Hier sollten wir auch ein paar Daten eintragen. Das sind z.B. meine Daten. Unter Common Name bitte den Domainnamen eintragen. Unter 'extra' attributes braucht man nichts einzutragen, einfach mit der Enter-Taste weiter.

 

Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Bayern
Locality Name (eg, city) []:Stein
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MBS-IT
Organizational Unit Name (eg, section) []:MBS-IT-Security
Common Name (e.g. server FQDN or YOUR name) []:mydomain1.firma.lan
Email Address []:admin@mydomain1.firma.lan

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Punkt
Bevor wir das Zertifikat signieren, erstellen wir noch eine Konfigurationsdatei, am besten mit der Erweiterung .ext. Der Datei vergeben wir den Namen mydomain1.firma.lan.ext.
In der Datei müssen wir nur die DNS-Namen anpassen.
Der Inhalt der Datei.

 

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = mydomain1
DNS.2 = mydomain1.firma.lan

Punkt
Der letzte Schritt ist das Signieren des Subdomains Zertifikates, in unserem Fall der Domain mydomain1.firma.lan. Das Zertifikat ist ca. 5 Jahre gültig.

 

# openssl x509 -req -in mydomain1.firma.lan.csr -CA myCA.crt -CAkey myCA.key -CAcreateserial -out mydomain1.firma.lan.crt -days 1850 -sha256 -extfile mydomain1.firma.lan.ext
Punkt
Bei der Konfiguration des Apache Virtual Host Datei wird das Subdomain Zertifikat in unserem Fall mydomain1.firma.lan.crt gebraucht und auch der privater Key mydomain1.firma.lan.key. In dem Artikel
Virtual Host ist es beschrieben
Punkt
Nach dem Apache Neustart können wir die Web-Seiten aufrufen. Danach werden wir feststellen, dass noch eine Warnung kommt.

Punkt
Um dieses Problem zu beseitigen, importieren wir auf den Clients das CA-Zertifikat. Das können wir per Softwareverteilung, Gruppenrichtlinien bzw. manuell machen.
So wird es manuell gemacht. Bei Windows wird zuerst die Datei myCA.crt von dem Linuxserver auf den Windows-Client übertragen.
Danach starten wir in CMD-Fenter und die entsprechende App C:\>certlm um das Zertifikat zu importieren, danach sollte keine Warnung mehr kommen.

Punkt
Auf Linux-Systemen muss das Zertifikat ebenfalls in den entsprechenden Zertifikatsspeicher kopiert werden. Unter Debian geht dies wie folgt.

# cp myCA.crt /usr/local/share/ca-certificates/myCA.crt
# update-ca-certificates
Punkt
Der Firefox Browser hat eine eigene Verwaltung für Stammzertifikate. Um ein neues Zertifikat zu importieren, geht man auf die Einstellungen auf und wählt den Unterpunkt Datenschutz & Sicherheit aus. Danach auf Zertifikate -> Zertifikate anzeigen... Hier kann man unter Zertifizierungsstellen das CA-Zertifikat importieren. In unserem Fall befindet sich das Zertifikat in der Datei myCA.crt.

Zertifikate verwalten

Punkt
Auf einem Linuxserver, so wie am Anfang dieses Artikels beschrieben ist, spielen wir die Zertifizierungsstelle, das bedeutet, dass Zertifikate für anderen Servern hier signiert werden können. In größeren Firmen verwalten meistens mehrere Admins verschiedene Web-Server.
Wenn ein Admin ein Zertifikat braucht, sollte CSR Zertifizierungsanforderung erstellen. Nach Erstellung der CSR-Datei wird die Datei an den Admin der Zertifizierungsstelle gesendet. Der Admin erstellt dann das gewünschte Zertifikat, wie am Anfang dieses Artikels beschrieben ist und schickt dem Aussteller der CSR-Datei das gewünschte CRT Zertifikat.

So wird die CSR-Datei erstellt. Es ist auch am Anfang dieses Artikels beschrieben

 

# openssl genrsa -out <DieGewünschteDomain>.key 4096
# openssl req -new -key <DieGewünschteDomain>.key -out <DieGewünschteDomain>.csr
Punkt
Das CA-Zertifikat haben wir schon früher auf allen Clients importiert, deshalb kommen im Browser bei dem Aufruf der internen Internetseite keine Warnungen mehr.