Aktionen

Ubuntu SAN Zertifikat anfordern mit interner Microsoft CA Zertifizierungsstelle und in Apache verwenden: Unterschied zwischen den Versionen

Aus znilwiki

 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 88: Zeile 88:
===Zertifikatsanforderung Variante 1 - mehrere DNS-Namen + IP===
===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.<br>
Wenn wir da mehr als einen Namen unterbringen wollen, müssen wir uns zunächst eine Konfigurationsdatei dafür erstellen.<br>
Diese lege ich hier mit in das Verzeichnis mit dem Key (damit ich diese später für Verlängerungen wiederfinde):<br>
  nano /etc/ssl/private/zabbix-website.conf
  nano /etc/ssl/private/zabbix-website.conf
mit folgendem Inhalt:<br>
mit folgendem Inhalt:<br>
Zeile 108: Zeile 109:
  [alt_names]
  [alt_names]
  IP.1 = <span style="background:lightblue">192.168.0.96</span>
  IP.1 = <span style="background:lightblue">192.168.0.96</span>
  DNS.1 = <span style="background:lightorange">monitoring.azulnet.net</span>
  DNS.1 = <span style="background:yellow">zabbix.azulnet.net</span>
  DNS.2 = <span style="background:lightorange">zabbix</span>
DNS.2 = <span style="background:orange">monitoring.azulnet.net</span>
  DNS.3 = <span style="background:lightorange">monitoring</span>
  DNS.3 = <span style="background:orange">zabbix</span>
  DNS.4 = <span style="background:orange">monitoring</span>
<span style="background:yellow">Gelb</span> hinterlegt ist der primäre Name des Servers, dieser ist dann direkt beim Aufruf der Eigenschaften des Zertifikates zu sehen.<br>
<span style="background:yellow">Gelb</span> hinterlegt ist der primäre Name des Servers, dieser ist dann direkt beim Aufruf der Eigenschaften des Zertifikates zu sehen.<br>
Ja, der muss unbedingt zwei mal hinterlegt werden, der {{code|CN =}} Eintrag dient nur der Anzeige, der {{code|DNS.1 =}} Eintrag muss unbedingt auch gemacht werden!<br>
<span style="background:lightblue">Hellblau</span> 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).<br>
<span style="background:lightblue">Hellblau</span> 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).<br>
<span style="background:lightorange">Orange</span> dann alle weiteren DNS oder NetBIOS Namen auf die der Server hören soll.<br>
<span style="background:orange">Orange</span> dann alle weiteren DNS oder NetBIOS Namen auf die der Server hören soll.<br>
<br>
Das Zertifikat fordern wir nun unter der Zuhilfenahme dieser Konfigurationsdatei an:<br>
openssl req -new -key /etc/ssl/private/zabbix-website.key -out /tmp/zabbix-website-request.csr -config /etc/ssl/private/zabbix-website.conf
<br>
----


===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<br>
cat /tmp/zabbix-website-request.csr
Anzeigen lassen, sollte es wie folgt aussehen:<br>
-----BEGIN CERTIFICATE REQUEST-----
MIIFAjCCAuoCAQAwbzELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJyZW1lbjEPMA0G
A1UEBwwGQnJlbWVuMRMwEQYDVQQKDApJbnRlcm5lIElUMQwwCgYDVQQLDANFRFYx
...
...
162EoNtOl11TgM1bTOLJPasOTOx8SuB2tdZ4n3ca9f6BT0x/QnU=
-----END CERTIFICATE REQUEST-----
<br>
In einem Webbrowser navigieren wird auf die Seite der '''''Zertifizierungsstellen-Webregistrierung''''', die URL ist typischweise
http://<DNS oder IP>/certsrv/
Achtung: Default '''KEIN''' https!!!<br>
Es kann sein das der eine Anmeldung anfordert für einen berechtigten Benutzer, es sollte einer mit Administratoren-Rechten sein:<br>
:[[Datei:ClipCapIt-251113-144433.PNG]]<br>
:[[Datei:ClipCapIt-251113-144528.PNG]]<br>
Dann erscheint dieser Dialog:<br>
:[[Datei:ClipCapIt-251113-145857.PNG]]<br>
In diesen kopiert Ihr oben den Inhalt der {{code|*.csr}} Datei hinein und wählt unten bei den Vorlagen {{code|Webserver}} aus.<br>
Wenn Ihr eine eigene Vorlage erstellt habt, könnt Ihr natürlich auch diese nehmen.<br>
Dann schickt Ihr die Anforderung per {{key|Einsenden}} ab.<br>
<br>
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.<br>
Bei automatischer Genehmigung können wir das Zertifikat direkt herunterladen:<br>
:[[Datei:ClipCapIt-251113-150911.PNG]]<br>
Ihr wählt bitte {{code|DER-codiert}} und den ersten der beiden Links.<br>
Die Datei heißt in der Regel immer {{code|certnew.ver}}, ich empfehle diese als ersten in den Servernamen umzubenennen bzw. passen zum Namen der Key-Datei.<br>
<br>
----
===Zertifikat konvertieren===
Die Datei von der Zertifizierungsstelle im DER-Format ist '''NICHT''' mit einem Texteditor lesbar und so nicht direkt auf unserem Linux-Apache-Webserver zu gebrauchen. Wir müssen diese erst umwandeln.<br>
Das kann man auch unter Windows machen - wenn man sich OpenSSL installiert: https://slproweb.com/products/Win32OpenSSL.html,<br>
oder unter Windows im Subsystem für Linux,<br>
oder Ihr kopiert die Datei z.B. per WinSCP auf euren Linux Webserver.<br>
In dem Beispiel hier habe ich die Datei auf den Linux-Server kopiert, die Ausgabedatei ist direkt die Datei die ich dann für den Apache verwende:<br>
openssl x509 -in /root/zabbix-website.cer -inform DER -out /etc/ssl/certs/zabbix-website.pem -outform PEM
Die {{code|PEM}} ist nun wieder eine normale Text-Datei, der Inhalt sieht wieder wie folgt aus:<br>
cat /etc/ssl/certs/zabbix-website.pem
Inhalt:<br>
-----BEGIN CERTIFICATE-----
MIIHfzCCBWegAwIBAgITcAAAAAL2WVTqlQxgjgAAAAAAAjANBgkqhkiG9w0BAQsF
ADA9MRMwEQYKCZImiZPyLGQBGRYDTkVUMRcwFQYKCZImiZPyLGQBGRYHQVpVTE5F
...
...
WxxLsfVLLVhD/Q5th8ozbFaDt9JBnS0TJ/wqX5HyZeobF9WST61XvsAAXX9NqkPR
BPw3
-----END CERTIFICATE-----
Nun haben wir die 2 Dateien die wir brauchen, das Zertifikat und den dazu gehörigen Schlüssel/Key:
Zertifikat: /etc/ssl/certs/zabbix-website.pem
Schlüssel:  /etc/ssl/private/zabbix-website.key
<br>
----
===Zertifikat in Webseitenkonfiguration einbauen===
Ich bearbeite die Datei {{code|default-ssl.conf}}
nano /etc/apache2/sites-available/default-ssl.conf
und ändere die Zeilen<br>
                #  A self-signed (snakeoil) certificate can be created by installing
                #  the ssl-cert package. See
                #  /usr/share/doc/apache2/README.Debian.gz for more info.
                #  If both key and certificate are stored in the same file, only the
                #  SSLCertificateFile directive is needed.
                SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
                SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
in
                #  A self-signed (snakeoil) certificate can be created by installing
                #  the ssl-cert package. See
                #  /usr/share/doc/apache2/README.Debian.gz for more info.
                #  If both key and certificate are stored in the same file, only the
                #  SSLCertificateFile directive is needed.
                SSLCertificateFile    /etc/ssl/certs/zabbix-website.pem
                SSLCertificateKeyFile /etc/ssl/private/zabbix-website.key
Danach den Apache die Konfiguration neu einlesen lassen in dem wir diesen neu starten:<br>
systemctl restart apache2.service


Wenn Ihr nun die Webseite per https aufruft (und das Zertifikat eurer CA auf eurem Rechner hinterlegt ist), sollte die Seite ohne Warnung erscheinen.<br>
----
===Umleitung http zu https===
Habe ich hier beschrieben: https://znil.net/index.php?title=Apache2_http_zu_https_Umleitung
<br>
----
----


Zeile 124: Zeile 214:
* https://it-ratgeber.com/active-directory-zertifikatdienste-installieren/
* https://it-ratgeber.com/active-directory-zertifikatdienste-installieren/
* https://znil.net/index.php?title=Zertifikate_mit_g%C3%BCltigkeitsdauer_l%C3%A4nger_als_1_Jahr_erlauben_bei_eigener_Zertifizierungsstelle
* https://znil.net/index.php?title=Zertifikate_mit_g%C3%BCltigkeitsdauer_l%C3%A4nger_als_1_Jahr_erlauben_bei_eigener_Zertifizierungsstelle
* https://www.der-windows-papst.de/2021/04/17/zertifikatsvorlage-laesst-sich-nicht-veroeffentlichen/
----
----
==Kommentare==
==Kommentare==
<comments />
<comments />

Aktuelle Version vom 13. November 2025, 16:09 Uhr

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 = zabbix.azulnet.net
DNS.2 = monitoring.azulnet.net
DNS.3 = zabbix
DNS.4 = monitoring

Gelb hinterlegt ist der primäre Name des Servers, dieser ist dann direkt beim Aufruf der Eigenschaften des Zertifikates zu sehen.
Ja, der muss unbedingt zwei mal hinterlegt werden, der {{{1}}} Eintrag dient nur der Anzeige, der {{{1}}} Eintrag muss unbedingt auch gemacht werden!
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:


Ihr wählt bitte DER-codiert und den ersten der beiden Links.
Die Datei heißt in der Regel immer certnew.ver, ich empfehle diese als ersten in den Servernamen umzubenennen bzw. passen zum Namen der Key-Datei.


Zertifikat konvertieren

Die Datei von der Zertifizierungsstelle im DER-Format ist NICHT mit einem Texteditor lesbar und so nicht direkt auf unserem Linux-Apache-Webserver zu gebrauchen. Wir müssen diese erst umwandeln.
Das kann man auch unter Windows machen - wenn man sich OpenSSL installiert: https://slproweb.com/products/Win32OpenSSL.html,
oder unter Windows im Subsystem für Linux,
oder Ihr kopiert die Datei z.B. per WinSCP auf euren Linux Webserver.
In dem Beispiel hier habe ich die Datei auf den Linux-Server kopiert, die Ausgabedatei ist direkt die Datei die ich dann für den Apache verwende:

openssl x509 -in /root/zabbix-website.cer -inform DER -out /etc/ssl/certs/zabbix-website.pem -outform PEM

Die PEM ist nun wieder eine normale Text-Datei, der Inhalt sieht wieder wie folgt aus:

cat /etc/ssl/certs/zabbix-website.pem

Inhalt:

-----BEGIN CERTIFICATE-----
MIIHfzCCBWegAwIBAgITcAAAAAL2WVTqlQxgjgAAAAAAAjANBgkqhkiG9w0BAQsF
ADA9MRMwEQYKCZImiZPyLGQBGRYDTkVUMRcwFQYKCZImiZPyLGQBGRYHQVpVTE5F
...
...
WxxLsfVLLVhD/Q5th8ozbFaDt9JBnS0TJ/wqX5HyZeobF9WST61XvsAAXX9NqkPR
BPw3
-----END CERTIFICATE-----

Nun haben wir die 2 Dateien die wir brauchen, das Zertifikat und den dazu gehörigen Schlüssel/Key:

Zertifikat: /etc/ssl/certs/zabbix-website.pem
Schlüssel:  /etc/ssl/private/zabbix-website.key



Zertifikat in Webseitenkonfiguration einbauen

Ich bearbeite die Datei default-ssl.conf

nano /etc/apache2/sites-available/default-ssl.conf

und ändere die Zeilen

               #   A self-signed (snakeoil) certificate can be created by installing
               #   the ssl-cert package. See
               #   /usr/share/doc/apache2/README.Debian.gz for more info.
               #   If both key and certificate are stored in the same file, only the
               #   SSLCertificateFile directive is needed.
               SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
               SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

in

               #   A self-signed (snakeoil) certificate can be created by installing
               #   the ssl-cert package. See
               #   /usr/share/doc/apache2/README.Debian.gz for more info.
               #   If both key and certificate are stored in the same file, only the
               #   SSLCertificateFile directive is needed.
               SSLCertificateFile    /etc/ssl/certs/zabbix-website.pem
               SSLCertificateKeyFile /etc/ssl/private/zabbix-website.key

Danach den Apache die Konfiguration neu einlesen lassen in dem wir diesen neu starten:

systemctl restart apache2.service

Wenn Ihr nun die Webseite per https aufruft (und das Zertifikat eurer CA auf eurem Rechner hinterlegt ist), sollte die Seite ohne Warnung erscheinen.


Umleitung http zu https

Habe ich hier beschrieben: https://znil.net/index.php?title=Apache2_http_zu_https_Umleitung


Quellen


Kommentare

Loading comments...