Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
server_und_serverdienste:eigene_ca_bauen_und_zertifikate_ausrollen [2019/03/06 21:34] – [Erstellen der eigenen CA] boospyserver_und_serverdienste:eigene_ca_bauen_und_zertifikate_ausrollen [2021/06/03 14:54] (aktuell) – [CA global in Ubuntu einspielen] loma
Zeile 1: Zeile 1:
 ====== Eigene CA bauen und Zertifikate ausrollen ====== ====== Eigene CA bauen und Zertifikate ausrollen ======
- FIXME+ 
 +Hauseigenes Apt-Repo: [[https://apt.iteas.at]]    [[https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=KE592Y5993ZKW|{{:wiki:btn_donatecc_lg.gif|}}]] 
 +\\ 
 +\\
 Grundegedanke war hier die ganze Hürde mit gekauften Zertifikaten zu umgehen, und das ganze noch einfacher zu gestalten. Für Organisationen intern, aber auch extern. Mit Installation von deinem DEB Paket in Ubuntu, und in Windows mit einem MSI. Wir erstellen eine eigene CA mit einem Wildcardzertifikat. Somit benötigen wir pro Domäne nur ein Zertifikat und können dies auf allen Geräten und Rechnern installieren. Daraus kann man natürlich auch Anmeldezertifikate (p12) erstellen, um die Sicherheit in relevanten Seiten hinauf zu schrauben. Grundegedanke war hier die ganze Hürde mit gekauften Zertifikaten zu umgehen, und das ganze noch einfacher zu gestalten. Für Organisationen intern, aber auch extern. Mit Installation von deinem DEB Paket in Ubuntu, und in Windows mit einem MSI. Wir erstellen eine eigene CA mit einem Wildcardzertifikat. Somit benötigen wir pro Domäne nur ein Zertifikat und können dies auf allen Geräten und Rechnern installieren. Daraus kann man natürlich auch Anmeldezertifikate (p12) erstellen, um die Sicherheit in relevanten Seiten hinauf zu schrauben.
  
 ===== Erstellen der eigenen CA ===== ===== Erstellen der eigenen CA =====
-Der Vorgang wird von dieser Seite hier beschrieben: https://wiki.ubuntuusers.de/CA/ FIXME 
- 
  
 **Für's erste hier mal einige nützliche OpenSSL-Befehle:** **Für's erste hier mal einige nützliche OpenSSL-Befehle:**
Zeile 41: Zeile 42:
 openssl pkcs12 -info -in testcert.pfx openssl pkcs12 -info -in testcert.pfx
 </code> </code>
 +
 +==== Vorbereiten des Servers ====
 +Wir verwenden hier ein Ubuntu 18.04 als CA Server. Sehr gut eigent sich auch ein LXC-Container oder Docker. Auch kann man die natürlich überall wo es passt dazu installieren. Folgende Pakete sollten installiert sein.
 +<code>
 +apt-get install ca-certificates ca-certificates-java ca-certificates-mono openssl gnutls-bin libnss3-tools 
 +</code>
 +Nun passen wir noch unsere ''/etc/ssl/openssl.cnf'' an. Mit diesem File kann man das meiste komplett automatisieren und vorallem für Google Chrome anpassen. Google Chrome ist der einzige Browser der [[https://support.google.com/chrome/a/answer/7391219?hl=de|spezielle Richtlinien]] für das Zertifikat verwendet. Das File nach eigenem Ermessen abändern. 
 +
 +[[https://forum.ubuntuusers.de/topic/eigenbaucertifikat-funkrioniert-in-chrome-nich/3/#post-9044714|Thread about]]
 +
 +<file bash openssl.cnf>
 +...
 +[ CA_default ]
 +...
 +default_days    = 3650                  # how long to certify for
 +default_crl_days= 30                    # how long before next CRL
 +default_md      = default               # use public key default MD
 +preserve        = no                    # keep passed DN ordering
 +...
 +# Extension copying option: use with caution.
 +# copy_extensions = copy
 +...
 +[ v3_req ]
 +...
 +subjectAltName = @alt_names
 +...
 +[ alt_names ]
 +DNS.1 = *.osit.cc
 +DNS.2 = localhost
 +DNS.3 = ip6-localhost
 +IP.1 = 127.0.0.1
 +IP.2 = ::1
 +...
 +[ v3_ca ]
 +...
 +subjectAltName = @alt_names
 +...
 +
 +</file>
 +Alle anderen Anpassungen im File sind zwecks Automatisierung empfohlen. Hier das ganze File zum Download: [[https://darkdevil.osit.cc/index.php/s/3jXMGM9gswWLQ74|openssl.cnf]] 
 +==== Erstellen der CA und bauen des Zertifikates ====
 +Man erstellt sich ein Verzeichnis wo man seine CA(s) baut, und erstellt diese. Den Wizard dabei einfach folgen. 
 +<code>
 +mkdir Zertifizierungsstelle
 +cd Zertifizierungsstelle
 +/usr/lib/ssl/misc/CA.pl -newca
 +</code>
 +Im aktuellen Verzeichnis sollte jetzt ein neues Verzeichnis **demoCA** mit einigen Dateien und weiteren Unterverzeichnissen entstanden sein. Folgende davon sind wichtig:
 +
 +  * **cacert.pem** - Das öffentliche Zertifikat der CA. Diese Datei sollte auf allen Clients importiert werden. Danach vertrauen diese Clients automatisch allen von der CA ausgestellten Zertifikaten. 
 +  * **certs/** - Das Verzeichnis in dem die signierten Zertifikate untergebracht werden. 
 +  * **private/** - Das Verzeichnis für die privaten Schlüssel. 
 +  * **private/cakey.pem** - Der private Schlüssel der CA. Dieser sollte die CA nie verlassen, außer zu Backup-Zwecken. (Und auch dann gesondert gesichert werden.)
 +  * **index.txt** - Sogenannte Datenbank der CA mit einer Liste aller ausgestellten Zertifikate und deren Status.
 +
 +=== Zertifikate signieren ===
 +
 +Mit dieser CA fängt man nun an die eigentlichen Zertifikate zu signieren, die man dann bspw. auf seinen Servern einsetzt. Auch hierfür verwendet man das CA.pl-Skript. Das Signieren läuft in zwei Stufen ab. Als erstes erstellt man einen neuen privaten Schlüssel und einen "Zertifikatsantrag" (CA.pl -newreq). Anschließend signiert man den Zertifikatsantrag (CA.pl -sign). Damit das Skript funktioniert, muss man sich im selben Verzeichnis befinden in dem man auch die CA erstellt hat, also eines oberhalb von demoCA.
 +
 +Bei "Common Name" trägt man dann sein Wildcard, z.B. ''*.osit.cc'' ein. 
 +<code>
 +/usr/lib/ssl/misc/CA.pl -newreq 
 +</code>
 +Beim Signieren des Zertifikatsantrags wird nicht nur die Gültigkeitsdauer (s. Erstellen der neuen CA) sondern auch der Verwendungszweck festgelegt. Per Default werden Zertifikate ohne besonderen Verwendungszweck ausgestellt. Für Webserver empfiehlt es sich allerdings den Zertifikatstyp und Verwendungszweck als zusätzliche X.509 v3-Erweiterungen hinzuzufügen. Dazu muss wieder die OpenSSL-Konfiguration ''/etc/ssl/openssl.cnf'' angepasst werden. 
 +<code>
 +...
 +[ usr_cert ]
 +...
 +basicConstraints=critical,CA:FALSE
 +...
 +nsCertType = server
 +...
 +keyUsage = critical,keyEncipherment
 +extendedKeyUsage = serverAuth
 +...
 +</code>
 +Jetzt wird der Zertifikatsantrag signiert und das neue Zertifkat mit den oben konfigurierten Attributen (X.509 v3-Erweiterungen) ausgestellt.
 +<code>
 +/usr/lib/ssl/misc/CA.pl -sign 
 +</code>
 +Hat man die "copy_extensions = copy" von oben aktiviert (nicht empfohlen), bekommt man folgende Fehlermeldung:
 +<code>
 +failed to update database
 +TXT_DB error number 2
 +</code>
 +Das Problem lies sich umgehen in dem ich die Datei ''demoCA/index.txt.attr'' bearbeitete und folgendes änderte: 
 +<code>
 +-- unique_subject = yes
 +++ unique_subject = no
 +</code>
 +Die Passphrase im Signierschritt ist natürlich die des privaten CA-Schlüssels, und nicht die des Server-Schlüssels der gerade erstellt worden ist. Außerdem muss man darauf achten, am Ende wirklich mit "y" zu bestätigen, sonst bricht das Skript mit einem Fehler ab. 
 +
 +Im aktuellen Verzeichnis - immer noch das von **demoCA** übergeordnete - befinden sich jetzt die Dateien:
 +  * **newreq.pem** - Zertifikatsantrag
 +  * **newcert.pem** - Signiertes öffentliches Zertifikat
 +  * **newkey.pem** - Privater Schlüssel
 +
 +**newreq.pem** ist inzwischen nutzlos geworden und kann gelöscht werden. Wichtig sind nur die beiden Dateien **newcert.pem** und **newkey.pem**. Diesen sollte man aussagekräftigere Namen geben und sie zur Archivierung in das jeweilige **demoCA**-Unterverzeichnis verschieben. Wer das Schlüsselpaar auf einem Server benutzen möchte und nicht bei jedem Server-Start die Passphrase des privaten Schlüssels eingeben will, kann dieses noch vorher aus dem privaten Schlüssel löschen. In diesem Fall sollte man aber auf jeden Fall darauf achten, dass der private Schlüssel ohne Passphrase durch restriktive Dateirechte[4] auf dem Server vor neugierigen Blicken geschützt wird:
 +<code>
 +penssl rsa -in newkey.pem -out newkey-without-password.pem
 +mv newkey-without-password.pem demoCA/private/worpswede_key.pem
 +mv newcert.pem demoCA/certs/worpswede_cert.pem
 +</code>
 +Diese zwei Dateien sind es auch, die der betreffende Server zum SSL-Betrieb benötigt. Die Datei **newkey.pem** kann jetzt ebenfalls gelöscht werden (nachdem man sich davon überzeugt hat, dass mit der Umwandlung alles geklappt hat, und **newkey-without-password.pem** nicht etwa leer ist).
 +
 +Wo diese Dateien auf dem Server letztendlich hinkopiert werden müssen, hängt vom benutzten Server ab. Üblich sind aber die Verzeichnisse **/etc/ssl/certs/** und **/etc/ssl/private/**.
 +
 ===== CA global in Ubuntu einspielen ===== ===== CA global in Ubuntu einspielen =====
 Das CA ganz einfach unter ''/usr/local/share/ca-certificates/'' ablegen. Mit dem nachfolgenden Befehl wird das Zertifikat in den globalen Zertifikatsspeicher des Systems importiert. Das CA ganz einfach unter ''/usr/local/share/ca-certificates/'' ablegen. Mit dem nachfolgenden Befehl wird das Zertifikat in den globalen Zertifikatsspeicher des Systems importiert.
Zeile 46: Zeile 154:
 update-ca-certificates update-ca-certificates
 </code> </code>
 +Man hat auch noch die Möglichkeit die Option ''-f'' dem Befehl anzuhängen. Dabei werden sämtlichen Symlinks von /etc/ssl gelöscht und neu verlinkt. Das macht Sinn wenn man eigene Zertifikate unter ''/usr/local/share/ca-certificates/'' löscht. Denn diese werden deshalb nicht unter ''/etc/ssl'' gelöscht.
 Alternativ interaktiv: ''dpkg-reconfigure ca-certificates'' Alternativ interaktiv: ''dpkg-reconfigure ca-certificates''
 +
  
 ===== Automatische Installation in Firefox (Linux und Windows) ===== ===== Automatische Installation in Firefox (Linux und Windows) =====