Aktionen

Ubuntu SAN Zertifikat anfordern mit interner Microsoft CA Zertifizierungsstelle und in Apache verwenden

Aus znilwiki

Changelog:

  • 13.11.2025 erste Version

Vorwort

In dieser Anleitung habe ich mir zusammengeschrieben wie

  • Ich ein SAN-Zertifikat, also ein Zertifikat mit alternativen DNS-Namen, anfordere
  • Es von einer internen Microsoft Zertifizierungsstelle CA ausstellen lasse
  • Und es dann im Apache2 Webserver einbinde

Das ganze als Gedächtnisstütze damit ich es beim nächsten mal schneller hinbekomme.
Das ganze zeige ich hier anhand eines Zabbix-Servers der bisher nur über http erreichbar ist, zukünftig aber über https angesprochen werden soll.

Warnung: Erst lesen! Dann machen! Ich nutze hier einen Server mit den Standard Apache-Dateien, fummelt Ihr auf einem Produktivsystem bei euch rum, braucht ihr ggf. nicht alle Schritte!

Auf dem Linux-Server

Voraussetzungen

Auf meinem Ubuntu Server ist der Apache2 Webserver installiert mit mindestens folgenden Optionen sind aktiviert:

a2enmod ssl
systemctl restart apache2.service

welche Module bereits aktiviert sind bekommt man mit apache2ctl -M heraus, der obige Befehl schadet aber auch nicht falls es schon aktiviert ist.
Es gibt unter Apache ab Werk 2 getrennte Dateien für Port 80 und 443:

root@zabbix:/# ll /etc/apache2/sites-available/
insgesamt 20
drwxr-xr-x 2 root root 4096 Nov 13 12:42 ./
drwxr-xr-x 8 root root 4096 Nov 13 12:32 ../
-rw-r--r-- 1 root root 1768 Jul  6  2023 000-default.conf
-rw-r--r-- 1 root root 6338 Okt 10  2018 default-ssl.conf

wovon aber nur die 000-default.conf aktiviert ist, diese enthält die Port 80 (=http) Konfiguration:

root@zabbix:/# ll /etc/apache2/sites-enabled/
insgesamt 8
drwxr-xr-x 2 root root 4096 Mai  9  2019 ./
drwxr-xr-x 8 root root 4096 Nov 13 12:32 ../
lrwxrwxrwx 1 root root   35 Mai  9  2019 000-default.conf -> ../sites-available/000-default.conf

Zum Testen aktiviere ich mir die https Konfiguration - die Webseite unter Port 80 / http läuft in der Zeit normal weiter:

a2ensite default-ssl.conf
systemctl reload apache2.service

Wenn ich jetzt den Server per https im Browser aufrufe, gibt es eine Zertifikatswarnung und die Default Webseite erscheint:




Zertifikatsschlüssel erstellen

Ab Werk nutzt die default-ssl.conf das folgende Zertifikat:

SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile   /etc/ssl/private/ssl-cert-snakeoil.key

die beiden Ordner sind damit also auch die Standardordner für die Ablage.
Zuerst brauchen wir einen eigenen, privaten Schlüssel:

openssl genrsa -out /etc/ssl/private/zabbix-website.key 4096

und noch den Besitzer und die Rechte anpassen:

chown root:ssl-cert /etc/ssl/private/zabbix-website.key
chmod 640 /etc/ssl/private/zabbix-website.key

so das das Verzeichnis hinter so aussieht:

root@zabbix:/# ll /etc/ssl/private/
insgesamt 16
drwx--x--- 2 root ssl-cert 4096 Nov 13 14:01 ./
drwxr-xr-x 4 root root     4096 Nov 13 12:31 ../
-rw-r----- 1 root ssl-cert 1708 Mai  9  2019 ssl-cert-snakeoil.key
-rw-r----- 1 root ssl-cert 3272 Nov 13 14:01 zabbix-website.key

Der Schlüssel ändert sich - auch später bei Zertifikatsverlängerungen - nie


Zertifikatsanforderung Variante 1 - nur ein DNS-Name + Interaktiv

Wenn wir nur einen Servernamen im Zertifikat benötigen, reicht für die Zertifikatsanforderung dafür ein Einzeiler, die weiteren notwendigen Daten werden an Interaktiv abgefragt:

openssl req -new -key /etc/ssl/private/zabbix-website.key -out /tmp/zabbix-website-request.csr

Die Fragen könnt Ihr beliebig und auch mit Unsinn beantworten, außer die gelb markierte:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Bremen
Locality Name (eg, city) []:Bremen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Interne IT
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:zabbix.azulnet.net
Email Address []:

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

Wo nichts steht habe ich einfach nur Enter gedrückt.
Gelb hinterlegt ist die Stelle wo Ihr dann den FQDN des Servers eintragen müsst.


Zertifikatsanforderung Variante 1 - mehrere DNS-Namen + IP

Wenn wir da mehr als einen Namen unterbringen wollen, müssen wir uns zunächst eine Konfigurationsdatei dafür erstellen.
Diese lege ich hier mit in das Verzeichnis mit dem Key (damit ich diese später für Verlängerungen wiederfinde):

nano /etc/ssl/private/zabbix-website.conf

mit folgendem Inhalt:

[req]
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no

[req_distinguished_name]
C = DE
ST = Bremen
L = Bremen
O = Interne IT
OU = EDV
CN = zabbix.azulnet.net

[req_ext]
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.0.96
DNS.1 = monitoring.azulnet.net
DNS.2 = zabbix
DNS.3 = monitoring

Gelb hinterlegt ist der primäre Name des Servers, dieser ist dann direkt beim Aufruf der Eigenschaften des Zertifikates zu sehen.
Hellblau ist die IP-Adresse des Systems. Kann man auch weglassen. Aber - wenn der Browser es zulässt - gibt es auch keine Warnung wenn man nur die IP-Adresse des Servers im Browser eingibt (ist eigentlich falsch, wird aber oft aktzeptiert).
Orange dann alle weiteren DNS oder NetBIOS Namen auf die der Server hören soll.

Das Zertifikat fordern wir nun unter der Zuhilfenahme dieser Konfigurationsdatei an:

openssl req -new -key /etc/ssl/private/zabbix-website.key -out /tmp/zabbix-website-request.csr -config /etc/ssl/private/zabbix-website.conf



Zertifikatsanforderung einreichen

Egal welche der beiden Wege Ihr genommen habt, nun sollte es eine Datei mit der Anforderung geben:

/tmp/zabbix-website-request.csr

Wenn wir und den Inhalt per

cat /tmp/zabbix-website-request.csr

Anzeigen lassen, sollte es wie folgt aussehen:

-----BEGIN CERTIFICATE REQUEST-----
MIIFAjCCAuoCAQAwbzELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJyZW1lbjEPMA0G
A1UEBwwGQnJlbWVuMRMwEQYDVQQKDApJbnRlcm5lIElUMQwwCgYDVQQLDANFRFYx
...
...
162EoNtOl11TgM1bTOLJPasOTOx8SuB2tdZ4n3ca9f6BT0x/QnU=
-----END CERTIFICATE REQUEST-----


In einem Webbrowser navigieren wird auf die Seite der Zertifizierungsstellen-Webregistrierung, die URL ist typischweise

http://<DNS oder IP>/certsrv/

Achtung: Default KEIN https!!!
Es kann sein das der eine Anmeldung anfordert für einen berechtigten Benutzer, es sollte einer mit Administratoren-Rechten sein:



Dann erscheint dieser Dialog:


In diesen kopiert Ihr oben den Inhalt der *.csr Datei hinein und wählt unten bei den Vorlagen Webserver aus.
Wenn Ihr eine eigene Vorlage erstellt habt, könnt Ihr natürlich auch diese nehmen.
Dann schickt Ihr die Anforderung per Einsenden ab.

Jetzt kommt es drauf an, wie eure Zertifizierungsstelle konfiguriert ist - ob diese noch erst genehmigt werden müssen, das muss ein Administrator in der Zertifizierungsstellen Konsole tun, oder ob es automatisch genehmigt wird.
Bei automatischer Genehmigung können wir das Zertifikat direkt herunterladen:



Quellen


Kommentare

Loading comments...