Aufsetzen des Apache-Servers: Unterschied zwischen den Versionen
Hedele (Diskussion | Beiträge) (→Installation der Apache-Pakete) |
Hedele (Diskussion | Beiträge) K (→Erzeugen des Schlüssels) |
||
(165 dazwischenliegende Versionen von 18 Benutzern werden nicht angezeigt) | |||
Zeile 26: | Zeile 26: | ||
== Allgemeine Rechner-Konfiguration == | == Allgemeine Rechner-Konfiguration == | ||
− | Die Software benötigt eine funktionierende Netzwerkumgebung. Einstellungen hierzu können Sie mit ''YaST'' unter der Rubrik "Netzwerkeinestellungen" vornehmen. Achten Sie insbesondere bei der Nutzung von [https://de.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol DHCP] darauf, dass weitere Rechner der Kanzlei von YaST tatsächlich im selben Nummernraum wie | + | Die Software benötigt eine funktionierende Netzwerkumgebung. Einstellungen hierzu können Sie mit ''YaST'' unter der Rubrik "Netzwerkeinestellungen" vornehmen. Achten Sie insbesondere bei der Nutzung von [https://de.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol DHCP] darauf, dass weitere Rechner der Kanzlei von YaST tatsächlich im selben Nummernraum wie dieser PC eingetragen wurden, auf dem Apache nun installiert werden soll. Ansonsten können diese Rechner später nicht auf die Kanzleisoftware zugreifen. |
Als Zweites sollte der PC auf dem aktuellen Softwarestand sein. Prüfen Sie diesen gegebenenfalls mit ''YaST'' in der Sektion '''Online update''' nach . | Als Zweites sollte der PC auf dem aktuellen Softwarestand sein. Prüfen Sie diesen gegebenenfalls mit ''YaST'' in der Sektion '''Online update''' nach . | ||
Zeile 35: | Zeile 35: | ||
{{Shell|> su}} | {{Shell|> su}} | ||
Geben Sie nach der Passwortbestätigung den folgenden Befehl ein: | Geben Sie nach der Passwortbestätigung den folgenden Befehl ein: | ||
− | {{Shell|# zypper in apache2 apache2-doc perl-Apache-DBI | + | {{Shell|# zypper in apache2 apache2-doc perl-Apache-DBI apache2-mod_perl apache2-mod_php5 apache2-mod_python firewalld-rpcbind-helper}} |
+ | |||
+ | === Nutzung der Yast-Funktion === | ||
+ | |||
+ | Die weiteren Einstellungen lassen sich zunächst vereinfachen, indem man die Yast-Funktionen für die Servereinrichtung nutzt. Laden Sie dafür das entsprechende Modul nach. Erfahrungsgemäß ist dieser Zwischenschritt jedoch nicht nötig, wenn man die Konfiguration in den nächsten Punkten sorgfältig durchführt. | ||
+ | {{Shell|# zypper in yast2-http-server apache2-mod_wsgi-python3}} | ||
+ | Unter ''yast2'' wählen Sie >HTTP-Server und klicken sich durch den Installationsprozess. Es müssen keine Anpassungen vorgenommen werden. Nach Abschluss der Installation verschieben Sie Ihre eigene Installation aus <tt>/ect/apache2/vhosts.d/YaSTsave</tt> wieder ins obere Verzeichnis <tt>/ect/apache2/vhosts.d</tt>. | ||
+ | |||
+ | Nach Abschluss der Einrichung kann das Hilfsprogramm ''yast2-http-server'' wieder entfernt werden. | ||
+ | {{Shell|# zypper rm yast2-http-server}} | ||
=== Anpassung der Firewall === | === Anpassung der Firewall === | ||
Die Firewall ist so voreingestellt, dass sie über Port 80 auf den Rechner eingehende Daten grundsätzlich sperrt. Folglich müssen die Firewall-Einstellungen so angepasst werden, dass aus dem Lokalen Netzwerk über Port 80 eingehender Datenstrom akzeptiert wird. | Die Firewall ist so voreingestellt, dass sie über Port 80 auf den Rechner eingehende Daten grundsätzlich sperrt. Folglich müssen die Firewall-Einstellungen so angepasst werden, dass aus dem Lokalen Netzwerk über Port 80 eingehender Datenstrom akzeptiert wird. | ||
− | Die folgenden Schritte müssen weiterhin als Root ausgeführt werden. | + | Die folgenden Schritte müssen dazu weiterhin als Root ausgeführt werden. |
− | {{Shell|# sysconf_addword /etc/sysconfig/SuSEfirewall2 FW_CONFIGURATIONS_EXT apache2<br> | + | * bis [http://de.opensuse.org/Portal:42.3 Leap 42.3] |
+ | {{Shell|# sysconf_addword /etc/sysconfig/SuSEfirewall2 FW_CONFIGURATIONS_EXT apache2<br> sysconf_addword /etc/sysconfig/SuSEfirewall2 FW_CONFIGURATIONS_EXT apache2-ssl<br> sysconf_addword /etc/sysconfig/SuSEfirewall2 FW_CONFIGURATIONS_EXT http<br> sysconf_addword /etc/sysconfig/SuSEfirewall2 FW_CONFIGURATIONS_EXT https<br> rcSuSEfirewall2 restart }} | ||
Die Einstellungen finden sich jedoch auch unter ''YaST'' und können dort im '''etc/sysconfig-Editor''' mit den Einträgen ''apache2'' und ''apache2-ssl'' aktiviert werden, indem sie diese durch Leerzeichen getrennt im Feld ''FW_CONFIGURATIONS_EXT'' in <tt>/etc/sysconfig/SuSEfirewall2 </tt> einsetzen. Diese Konfigurationsvariable findet sich unter: | Die Einstellungen finden sich jedoch auch unter ''YaST'' und können dort im '''etc/sysconfig-Editor''' mit den Einträgen ''apache2'' und ''apache2-ssl'' aktiviert werden, indem sie diese durch Leerzeichen getrennt im Feld ''FW_CONFIGURATIONS_EXT'' in <tt>/etc/sysconfig/SuSEfirewall2 </tt> einsetzen. Diese Konfigurationsvariable findet sich unter: | ||
Network > Firewall > SuSEfirewall2 | Network > Firewall > SuSEfirewall2 | ||
+ | |||
+ | * ab [http://de.opensuse.org/Portal:Tubmleweed Tumbleweed] | ||
+ | Die Variablen können per ''YaST'' unter | ||
+ | Networt > Firewall | ||
+ | unter der Listenauswahl ''Permanent'' wir folgt eingestellt werden: | ||
+ | [[Datei:Apache2_firewall.png|thumb|600px|left|Firewall-Einstellungen für den Apache-Server]] | ||
+ | <br clear=all> | ||
+ | Alternativ ist die Auswahl per Shell möglich: | ||
+ | {{Shell|# firewall-cmd --zone internal --permanent --add-interface=eth0<br> firewall-cmd --zone internal --permanent --add-service=apache2<br> firewall-cmd --zone internal --permanent --add-service=apache2-ssl<br> firewall-cmd --zone internal --permanent --add-service=nfs<br> firewall-cmd --zone internal --permanent --add-service=http<br> firewall-cmd --zone internal --permanent --add-service=https<br> firewall-cmd --reload}} | ||
=== Aktivierung des Servers === | === Aktivierung des Servers === | ||
− | Starten Sie den Server und | + | Starten Sie den Server und aktivieren Sie ihn in einem Bootverzeichnis, damit er mit dem Rechner hochgefahren wird: |
− | {{Shell|# rcapache2 start<br> | + | {{Shell|# rcapache2 start<br> chkconfig -a apache2}} |
− | + | Sie können diese Einstellungen jederzeit unter ''YaST'' ändern im Untermenü | |
+ | YaST > Dienste-Verwaltung | ||
=== Hinzufügen von Apache-Modulen=== | === Hinzufügen von Apache-Modulen=== | ||
− | Um benötigte Apache-Module zu laden, können wir die Konfigurationsvariable ''APACHE_MODULES'' in <tt>/etc/sysconfig/apache2</tt> editieren. Schneller geht es jedoch mit den nachfolgenden Befehlen. Nach | + | Um benötigte Apache-Module zu laden, können wir die Konfigurationsvariable ''APACHE_MODULES'' in <tt>/etc/sysconfig/apache2</tt> editieren. Schneller geht es jedoch mit den nachfolgenden Befehlen. Nach der Änderung muss der Server neu gestartet werden. Auch für die folgenden Befehle sind wieder die Rechte eines Superusers vonnöten. |
− | {{Shell|# a2enmod mod_perl<br> | + | {{Shell|# a2enmod mod_perl<br> a2enmod mod_env<br> a2enmod mod_ssl<br> a2enmod mod_php5<br> a2enmod mod_python<br> a2enmod mod_wsgi<br> a2enmod mod_cgi<br> a2enmod -l<br> rcapache2 restart}} |
== Virtual Hosts == | == Virtual Hosts == | ||
+ | ===Allgemeines=== | ||
Das Verzeichnis für alle Virtual Host ist <tt>/etc/apache2/vhosts.d/</tt>. Wie Sie sehen gibt es zwei Konfigurationsdateien - eine mit ssl, die andere ohne ssl. Wir benutzen die Vorlage ohne [https://de.wikipedia.org/wiki/Transport_Layer_Security Secure Sockets Layer]. Nur Dateien mit dem Suffix ".conf" werden automatisch in die Apachekonfiguration einbezogen. | Das Verzeichnis für alle Virtual Host ist <tt>/etc/apache2/vhosts.d/</tt>. Wie Sie sehen gibt es zwei Konfigurationsdateien - eine mit ssl, die andere ohne ssl. Wir benutzen die Vorlage ohne [https://de.wikipedia.org/wiki/Transport_Layer_Security Secure Sockets Layer]. Nur Dateien mit dem Suffix ".conf" werden automatisch in die Apachekonfiguration einbezogen. | ||
Zeile 66: | Zeile 87: | ||
* Sei können für Ihre Verzeichnisse die Vorlage '''vhost.template''' kopieren und als Ihre '''{DOMAINNAME}.conf''' speichern. Hier hinein tragen Sie anschließend die Unterverzeichnisse für Ihren Virtual Host ein. | * Sei können für Ihre Verzeichnisse die Vorlage '''vhost.template''' kopieren und als Ihre '''{DOMAINNAME}.conf''' speichern. Hier hinein tragen Sie anschließend die Unterverzeichnisse für Ihren Virtual Host ein. | ||
− | Für Lawsuit wird die Konfigurationsdatei jedoch im Unterverzeichnis <tt>lawsuit/ | + | ===Einstellungen für ''Lawsuit''=== |
+ | Für ''Lawsuit'' wird die Konfigurationsdatei jedoch im Unterverzeichnis <tt>lawsuit/settings</tt> bereits fertig zur Verfügung gestellt. Sie müssen lediglich in der genannten Datei den Platzhalter durch den eigenen Nutzernamen ersetzen und die fertige Datei in das Vhosts-Verzeichnis verlinken. Wechseln Sie in das Unterverzeichnis <tt>lawsuit/settings</tt>. Wenn Sie ''Lawsuit'' in Ihrem Nutzerhauptverzeichnis installiert haben, gelangen Sie mit diesem Befehl dorthin: | ||
+ | {{Shell | > cd ~/lawsuit/settings}} | ||
+ | Erstellen Sie dort eine Konfigurationsdatei aus der Vorlage <tt>lawsuit-httpd.template</tt> und ersetzen Sie den darin enthaltenen Platzhalter ''meinpfad'' dabei durch Ihren Pfad zum aktuellen Verzeichnis. Dies erfolgt automatisiert durch diese Befehle: | ||
+ | {{Shell | > pfad=`pwd | sed 's/\/lawsuit.*//' | sed 's/\//\\\\\//g'`<br> > sed "s/meinpfad/$pfad/g" lawsuit-httpd.template > lawsuit-httpd.conf}} | ||
+ | Falls Ihr Pfad zum Ordner <tt>Documents</tt> nicht mit dem soeben ermittelten Pfad für <tt>lawsuit</tt> identisch ist, passen Sie diese Einstellungen für das Verzeichnis <tt>Documents</tt> bitte in der <tt>lawsuit-httpd.conf</tt> mit einem Editor wie '''kate''' von Hand an. | ||
+ | |||
+ | Abschließend kopieren Sie die erstellte Konfigurationsdatei als ''Superuser'' in das Verzeichnis der Virtual Hosts von Apache: | ||
+ | |||
+ | {{Shell | > sudo cp lawsuit-httpd.conf /etc/apache2/vhosts.d/}} | ||
+ | |||
+ | * Neustart von Apache | ||
+ | {{Shell | > sudo service apache2 restart}} | ||
+ | === Anpassen der Konfiguration === | ||
+ | Um Ergänzungen oder Änderungen einheitlich für alle Virtual Hosts an der Datei <tt>/etc/apache2/default-server.conf</tt> vorzunehmen, editieren Sie die Konfigurationsvariable ''APACHE_CONF_INCLUDE_FILES'' mithilfe von | ||
+ | YaST > etc/sysconfig-Editor | ||
+ | oder arbeiten direkt in der Textdatei <tt>/etc/sysconfig/apache2</tt>. Zum Verständnis der Hierarchie und des Layouts um Dateien einzubeziehen, lesen Sie die Kommentierung im Kopf der <tt>httpd.conf</tt>. Die ursprüngliche, einfache Konfigurationsdatei mit nur 40K findet sich notfalls unter <tt>/usr/share/doc/packages/apache2/httpd-std.conf-prefork</tt>. | ||
− | : | + | == Optional: Ein Zertifikat für localhost erstellen == |
− | : | + | Bei Mehrplatzsystemen funktionieren die Javascript-Voreintragungen bei Nutzung einer sicheren HTTPS-Verbindung nur, wenn ein eigenes Zertifikat erstellt wird, dessen Aussteller zudem noch aus vertrauenswürdig eingestuft werden muss.OpenSSL bringt umfassende Werkzeuge mit, um eine eigene, kleine Certificate Authority (CA) betreiben zu können. |
− | : | + | === Vergabe einer Domain für den Rechner mit den Lawsuit-Daten === |
+ | Unter <i>yast2 > Netzwerkdienste > Rechnernamen</i> fügen Sie unter der Zeile "localhost" eine Zeile mit folgenden Daten ein: | ||
+ | IP-Adresse: <b>192.168.2.10</b> | ||
+ | Hostnamen: <b>k1.local</b> | ||
+ | Aliasnamen: <b>k1</b> | ||
+ | [[Datei:Hostkonfiguration.png|thumb|600px|left|Eigenen Rechnernamen vergeben]] | ||
+ | <br clear=all> | ||
+ | Sie können statt "k1" eine beliebe andere Bezeichnung für den Hauptrechner wählen, müssen dann aber Ihre Domain in den folgenden Einstellungen beibehalten. | ||
− | + | === Certificate Authority (CA) erstellen === | |
− | + | Zu Beginn wird die Certificate Authority generiert. Zunächst wird ein geheimer Private Key erzeugt: | |
− | + | {{Shell |> sudo openssl genrsa -aes256 -out /etc/ssl/private/rootCA.key 4096}} | |
− | : | + | Der Key trägt den Namen “rootCA.pem” und hat eine Länge von 4096 Bit. Die Option “-aes256” führt dazu, dass der Key mit einem Passwort geschützt wird. Die Key-Datei der CA muss tatsächlich besonders gut geschützt werden. Ein Angreifer, der den Key in die Hände bekommt, kann beliebig gefälschte Zertifikate im Namen der Kanzlei ausstellen, denen die Clients trauen. Die Verschlüsselung dieses Keys mit einem Passwort gibt zusätzlichen Schutz. Das gewünschte Passwort wird bei der Generierung abgefragt. |
+ | Einen geheimen Key für die CA gibt es damit also schon - es fehlt noch das Root-Zertifikat, das von den Clients später importiert werden muss, damit die von der CA ausgestellten Zertifikate im Browser als gültig erkannt werden. Das Root-Zertifikat “ca-root.pem” wird mit folgendem Befehl erzeugt: | ||
+ | {{Shell |> sudo openssl req -x509 -new -nodes -key /etc/ssl/private/rootCA.key -sha512 -days 5483 -out /etc/ssl/certs/rootCA.pem}} | ||
+ | In diesem Fall wird die CA 5483 Tage, also mit Schalttagen 15 Jahre lang gültig bleiben. Während der Generierung werden das Passwort für die CA und einige Attribute abgefragt (hier ein Beispiel): | ||
+ | Country Name (2 letter code) [AU]:<b>DE</b> | ||
+ | State or Province Name (full name) [Some-State]:<b>Nordrhein-Westfalen</b> | ||
+ | Locality Name (eg, city) []:<b>Muenster</b> | ||
+ | Organization Name (eg, company) [Internet Widgits Pty Ltd]:<b>Kanzlei Hermanns</b> | ||
+ | Organizational Unit Name (eg, section) []:<b>Rechtsanwalt</b> | ||
+ | Common Name (e.g. server FQDN or YOUR name) []:<b>RA Matthias Hermanns</b> | ||
+ | Email Address []:<b>hermanns@iustus.eu</b> | ||
− | + | ===Erzeugen des Schlüssels=== | |
− | + | Mit diesen Daten wird auch eine Konfiguratunsdatei mit Namen <tt>ssl.cnf</tt> befüllt, die die Schlüsselausgabe später vereinfacht. | |
+ | {{Shell |> cd ~/bin<br> mkdir keys<br> cd keys<br> kate ssl.cnf}} | ||
+ | Die Datei kann beispielsweise den folgenden Inhalt haben | ||
+ | [req] | ||
+ | # Standard-Verschlüsselung | ||
+ | default_bits = 4096 | ||
+ | # verhindere prompt für die Zertifikat-Erstellung | ||
+ | # (Daten kommen aus dieser Datei) | ||
+ | prompt = no | ||
+ | # Verschlüsselungsmethode | ||
+ | default_md = sha512 | ||
+ | # Kryptographie abschalten | ||
+ | encrypt_key = no | ||
+ | # Sektion für Zertifizierer-Informationen: | ||
+ | distinguished_name = dn | ||
+ | |||
+ | # Zertifizierer-Informationen: | ||
+ | [dn] | ||
+ | # Länder-Code | ||
+ | C=DE | ||
+ | # Bundesland | ||
+ | ST=Nordrhein-Westfalen | ||
+ | # Stadt | ||
+ | L=Muenster | ||
+ | # Bezeichnung/Firmen-Name/Dein Name: | ||
+ | O=Kanzlei Hermanns | ||
+ | # Aussteller Name | ||
+ | OU=RA Matthias Hermanns | ||
+ | # E-Mail-Adresse | ||
+ | emailAddress=hermanns@iustus.eu | ||
+ | # Primärer Servername | ||
+ | CN = <b>k1</b> | ||
+ | |||
+ | [v3_ca] | ||
+ | keyUsage = digitalSignature, keyEncipherment | ||
+ | extendedKeyUsage = serverAuth | ||
+ | subjectAltName = IP:<b>192.168.2.10</b>, DNS:<b>k1</b>, DNS:<b>k1.local</b> | ||
+ | |||
+ | [ req_ext ] | ||
+ | subjectAltName = @alt_names | ||
+ | |||
+ | [alt_names] | ||
+ | # Primärer Server-Name | ||
+ | DNS.1 = <b>k1</b> | ||
+ | # Sekunärer Server-Name | ||
+ | DNS.2 = <b>k1.local</b> | ||
+ | # Wildcard Subdomains | ||
+ | DNS.3 = *.<b>k1.local</b> | ||
− | === | + | Speichern Sie die so erstellte Datei <tt>ssl.cnf</tt> im <tt>bin</tt>-Verzeichnis ab. Mit folgendem Befehl erzeugen Sie nun als zertifizierter Aussteller die eigentlichen Schlüssel für die SSL-Verbindung. |
− | + | Zunächst wird der RSA-Key mit 3072 Bit erzeugt (Asymmetrischer Schlüssel von Rivest, Shamir und Adleman, der einen privaten und einen öffentlichen Teil hat): | |
+ | {{Shell |> openssl genrsa -out k1.key 3072}} | ||
+ | Nun folgt die Certificate Signing Request (CSR; deutsch Zertifikatsignierungsanforderung), ein digitaler Antrag, um mittels der soeben erzeugten digitalen Signatur und der zusätzlichen Identitätsangaben zum Antragstellers aus der <tt>ssl.cnf</tt> ein persönliches digitales Identitäts-Zertifikat (auch Public-Key-Zertifikat genannt) zu erstellen: | ||
+ | {{Shell |> openssl req -new -keyout ~/bin/keys/k1.key -out ~/bin/keys/k1.csr -config ~/bin/keys/ssl.cnf}} | ||
+ | Mithilfe des Wurzelzertifikats vom verifizierten Aussteller (uns selbst) wird nun der eigentliche Schlüssel erstellt, damit eine Rückverfolgung zum Wurzelzertifikat möglich ist. | ||
+ | {{Shell |> sudo openssl x509 -req \<br> -in ~/bin/keys/k1.csr \<br> -CA /etc/ssl/certs/rootCA.pem \<br> -CAkey /etc/ssl/private/rootCA.key \<br> -CAcreateserial \<br> -out ~/bin/keys/k1.crt \<br> -days 3653 \<br> -extfile ~/bin/keys/ssl.cnf \<br> -extensions v3_ca }} | ||
+ | |||
+ | Damit die Zertifkate in unsere regelmäßige Sicherungsspeicherung aufgenommen werden, können wir sie in das Schlüsselverzeichnis <tt>keys</tt> unter <tt>lawsuit</tt> kopieren. Dies ist jedoch nur optional, weil es ein Sicherheitsrisiko eröffnet: | ||
+ | {{Shell |> sudo chown matthias:users keys/k1.crt<br> chmod 640 ~/bin/keys/k1.*<br> cp ~/bin/keys/k1.* ~/lawsuit/keys/}} | ||
+ | |||
+ | === Verbindung mit dem Server === | ||
+ | Wenn Sie host-Datei <tt>lawsuit-httpd.conf</tt> automatisch wie oben vorgeschlagen generiert haben, sind die notwendigen Einstellungen schon voreingetragen und müssen nur auskommentiert werden. Ansonsten ergänzen Sie unter /etc/apache2/vhosts.d/ | ||
+ | folgende Zeilen: | ||
+ | <VirtualHost *:80> | ||
+ | ServerName <b>k1</b> | ||
+ | ServerAlias <b>k1.local</b> | ||
+ | </VirtualHost> | ||
+ | |||
+ | <IfModule mod_ssl.c> | ||
+ | <VirtualHost *:443> | ||
+ | ServerAdmin webmaster@localhost | ||
+ | DocumentRoot /home/BENUTZERNAME/lawsuit/ | ||
+ | ServerName <b>k1</b> | ||
+ | ServerAlias <b>k1.local</b> | ||
+ | ErrorLog /var/log/apache2/error_log | ||
+ | SSLEngine on | ||
+ | SSLCertificateFile /home/BENUTZERNAME/bin/keys/<b>k1.crt</b> | ||
+ | SSLCertificateKeyFile /home/BENUTZERNAME/bin/keys/<b>k1.key</b> | ||
+ | <IfModule mod_headers.c> | ||
+ | Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" | ||
+ | </IfModule> | ||
+ | <FilesMatch "\.(cgi|html|shtml|pl|phtml|php)$"> | ||
+ | SSLOptions +StdEnvVars | ||
+ | </FilesMatch> | ||
+ | <Directory /home/BENUTZERNAME/lawsuit/cgi-bin> | ||
+ | SSLOptions +StdEnvVars | ||
+ | </Directory> | ||
+ | </VirtualHost> | ||
+ | </IfModule> | ||
+ | |||
+ | # configuration | ||
+ | SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2 | ||
+ | SSLHonorCipherOrder off | ||
+ | SSLSessionTickets off | ||
+ | |||
+ | Damit diese Einstellungen nicht der vom Linux-System vorgegebenen Konfiguration widersprechen, müssen in der Datei <tt>/usr/share/doc/packages/apache2/original/extra/httpd-ssl.conf</tt> noch folgende Zeilen auskommentiert und berichtigt werden | ||
+ | #<b>ServerName</b> www.example.com:443 | ||
+ | ServerName <b>k1</b>:443 | ||
+ | ferner | ||
+ | #<b>SSLCertificateFile</b> "/etc/apache2/server.crt" | ||
+ | SSLCertificateFile "/home/BENUTZERNAME/bin/keys/k1.crt" | ||
+ | und | ||
+ | #<b>SSLCertificateKeyFile</b> "/etc/apache2/server.key" | ||
+ | SSLCertificateKeyFile "/home/BENUTZERNAME/bin/keys/k1.key" | ||
+ | |||
+ | |||
+ | Unter Firefox kann das selbstgezeichnete Zertifikat nun verwendet werden. Bitte beachten Sie, dass für jede Apache-Konfigurrationsdatei ein anderer Port geöffnet werden muss, "443" also nur einmal verwendet werden kann. Sie können alternativ z.B. "4443" verwenden. | ||
+ | |||
+ | Abschließender Test und Neustart: | ||
+ | {{Shell |# sudo apache2ctl -t<br> sudo systemctl restart apache2}} | ||
+ | |||
+ | === Registrierung als vertrauenswürdiger Aussteller für den Firefox-Browser === | ||
+ | Damit der Firefox-Browser das Zertifikat tatsächlich verwendet und als vertrauenswürdig akzeptiert, muss es im Kleopatra-Schlüsseldienst eingetragen werden, auf den der Browser zugreift. | ||
+ | {{Shell |> kleopatra}} | ||
+ | Klicken Sie den Reiter <b>Importieren</b> an und fügen Sie nacheinander die folgenden Dateien ein: | ||
+ | <br><tt>/home/BENUTZERNAME/bin/keys/k1.crt</tt> | ||
+ | <br><tt>/etc/ssl/certs/rootCA.pem</tt><br> | ||
+ | Bitte bestätigen Sie die erbetenen Beglaubigungen mit der Maustaste. | ||
+ | [[Datei:Kleopatra.png|thumb|600px|left|Importieren der Zertifikate in das Kleopatra-Schlüsselverwaltungsprogramm]] | ||
+ | <br clear=all> | ||
+ | Nun wechseln Sie in den Firefox-Browser und geben in die Adresszeile ein | ||
+ | about:config | ||
+ | Dort ändern Sie die Variable | ||
+ | security.enterprise_roots.enabled -> true | ||
+ | von "false" auf "true". Nun bezieht der Browser auch Ihre eigenen CA-Beglaubigungen des Unternehmens eine seine Bewertungen mit ein und vergibt ein grünes Schlüsselsymbol. | ||
== Problembehebung == | == Problembehebung == | ||
− | + | Lesen Sie wenn möglich die Fehlermeldungen nach dem Start des Servers. Versuchen Sie Fehler ggf. zu reproduzieren und vergleichen Sie die Einträge in den Log-Dateien. Den Einblick auf die dortigen Meldungen können Sie mit dem folgenden Befehl auf den neuesten Stand reduzieren:: | |
{{Shell | # tail -F /var/log/apache2/*}} | {{Shell | # tail -F /var/log/apache2/*}} | ||
− | + | Da die Error-Messages schnell sehr großen Umfang einnehmen, der am Ende sogar den Systemstart blockieren kann, empfiehlt es sich, mit Logrotate den Bestand unter Kontrolle zu halten. Installieren Sie dazu, falls noch nicht vom System geschehen: | |
+ | {{Shell | # zypper in logrotate}} | ||
+ | Sie können die Einstellungen in der Konfigurationsdatei | ||
+ | /etc/logrotate.conf | ||
+ | ändern. Eine typische Konfiguration von <tt>logrotate.conf</tt> sieht z.B. wie folgt aus: | ||
+ | {{Shell |# see "man logrotate" for details | ||
+ | <br># rotate log files weekly | ||
+ | <br>weekly | ||
+ | <br># keep 4 weeks worth of backlogs | ||
+ | <br>rotate 4 | ||
+ | <br><b># remove rotated logs older than <count> days | ||
+ | <br>maxage 90 </b> | ||
+ | <br># create new (empty) log files after rotating old ones | ||
+ | <br>create | ||
+ | <br># use date as a suffix of the rotated file | ||
+ | <br>dateext | ||
+ | <br># uncomment this if you want your log files compressed | ||
+ | <br>compress | ||
+ | <br># comment these to switch compression to use gzip or another | ||
+ | <br># compression scheme | ||
+ | <br>compresscmd /usr/bin/xz | ||
+ | <br>uncompresscmd /usr/bin/xzdec | ||
+ | <br># RPM packages drop log rotation information into this directory | ||
+ | <br>include /etc/logrotate.d | ||
+ | }} | ||
+ | |||
+ | Sollten Sie einen Fehler gefunden haben, [https://de.opensuse.org/SDB:Fehler_berichten berichten Sie ihn] bitte. | ||
==Weiterführende Informationen== | ==Weiterführende Informationen== | ||
=== Verwandte Artikel === | === Verwandte Artikel === | ||
− | *[ | + | *[https://de.opensuse.org/YaST_Module_Firewall#Firewall_Einrichten openSUSE Firewall] |
* Package documentation and example configuration files in /usr/share/doc/packages/apache2/ | * Package documentation and example configuration files in /usr/share/doc/packages/apache2/ | ||
Zeile 103: | Zeile 304: | ||
{{DEFAULTSORT:{{PAGENAME}}}} | {{DEFAULTSORT:{{PAGENAME}}}} | ||
− | [[Category: | + | [[Category:Linuxinstallation]] |
Aktuelle Version vom 16. September 2023, 22:51 Uhr
Inhaltsverzeichnis
Einführung[Bearbeiten]
Diese Dokument gibt eine rasche Einführung, wie ein Apache-Server auf dem lokalen Rechner aufgesetzt werden kann, der die Lawsuit-Programmteile bereitstellt.
Die Kurzanleitung geht nicht vertieft auf mögliche Experten-Einstellungen des Servers ein. Insbesondere bleiben hier Sicherheitseinstellungen unberücksichtigt, die für den Betrieb als öffentlich zugänglicher Netzserver unumgänglich wären. Die nachfolgenden Schritte sind für Anwender gedacht, die Lawsuit intern auf dem Kanzleirechner hinter einer Firewall betreiben möchten.
Allgemeine Rechner-Konfiguration[Bearbeiten]
Die Software benötigt eine funktionierende Netzwerkumgebung. Einstellungen hierzu können Sie mit YaST unter der Rubrik "Netzwerkeinestellungen" vornehmen. Achten Sie insbesondere bei der Nutzung von DHCP darauf, dass weitere Rechner der Kanzlei von YaST tatsächlich im selben Nummernraum wie dieser PC eingetragen wurden, auf dem Apache nun installiert werden soll. Ansonsten können diese Rechner später nicht auf die Kanzleisoftware zugreifen.
Als Zweites sollte der PC auf dem aktuellen Softwarestand sein. Prüfen Sie diesen gegebenenfalls mit YaST in der Sektion Online update nach .
Installation der Apache-Pakete[Bearbeiten]
Der Apache-Server und das optionale Perl-Modul können mit zypper installiert werden. Öffnen Sie dazu ein Terminal-Fenster und wechseln Sie wie folgt in den Superuser-Modus:
Geben Sie nach der Passwortbestätigung den folgenden Befehl ein:
Nutzung der Yast-Funktion[Bearbeiten]
Die weiteren Einstellungen lassen sich zunächst vereinfachen, indem man die Yast-Funktionen für die Servereinrichtung nutzt. Laden Sie dafür das entsprechende Modul nach. Erfahrungsgemäß ist dieser Zwischenschritt jedoch nicht nötig, wenn man die Konfiguration in den nächsten Punkten sorgfältig durchführt.
Unter yast2 wählen Sie >HTTP-Server und klicken sich durch den Installationsprozess. Es müssen keine Anpassungen vorgenommen werden. Nach Abschluss der Installation verschieben Sie Ihre eigene Installation aus /ect/apache2/vhosts.d/YaSTsave wieder ins obere Verzeichnis /ect/apache2/vhosts.d.
Nach Abschluss der Einrichung kann das Hilfsprogramm yast2-http-server wieder entfernt werden.
Anpassung der Firewall[Bearbeiten]
Die Firewall ist so voreingestellt, dass sie über Port 80 auf den Rechner eingehende Daten grundsätzlich sperrt. Folglich müssen die Firewall-Einstellungen so angepasst werden, dass aus dem Lokalen Netzwerk über Port 80 eingehender Datenstrom akzeptiert wird. Die folgenden Schritte müssen dazu weiterhin als Root ausgeführt werden.
- bis Leap 42.3
sysconf_addword /etc/sysconfig/SuSEfirewall2 FW_CONFIGURATIONS_EXT apache2-ssl
sysconf_addword /etc/sysconfig/SuSEfirewall2 FW_CONFIGURATIONS_EXT http
sysconf_addword /etc/sysconfig/SuSEfirewall2 FW_CONFIGURATIONS_EXT https
rcSuSEfirewall2 restart
Die Einstellungen finden sich jedoch auch unter YaST und können dort im etc/sysconfig-Editor mit den Einträgen apache2 und apache2-ssl aktiviert werden, indem sie diese durch Leerzeichen getrennt im Feld FW_CONFIGURATIONS_EXT in /etc/sysconfig/SuSEfirewall2 einsetzen. Diese Konfigurationsvariable findet sich unter:
Network > Firewall > SuSEfirewall2
- ab Tumbleweed
Die Variablen können per YaST unter
Networt > Firewall
unter der Listenauswahl Permanent wir folgt eingestellt werden:
Alternativ ist die Auswahl per Shell möglich:
firewall-cmd --zone internal --permanent --add-service=apache2
firewall-cmd --zone internal --permanent --add-service=apache2-ssl
firewall-cmd --zone internal --permanent --add-service=nfs
firewall-cmd --zone internal --permanent --add-service=http
firewall-cmd --zone internal --permanent --add-service=https
firewall-cmd --reload
Aktivierung des Servers[Bearbeiten]
Starten Sie den Server und aktivieren Sie ihn in einem Bootverzeichnis, damit er mit dem Rechner hochgefahren wird:
chkconfig -a apache2
Sie können diese Einstellungen jederzeit unter YaST ändern im Untermenü
YaST > Dienste-Verwaltung
Hinzufügen von Apache-Modulen[Bearbeiten]
Um benötigte Apache-Module zu laden, können wir die Konfigurationsvariable APACHE_MODULES in /etc/sysconfig/apache2 editieren. Schneller geht es jedoch mit den nachfolgenden Befehlen. Nach der Änderung muss der Server neu gestartet werden. Auch für die folgenden Befehle sind wieder die Rechte eines Superusers vonnöten.
a2enmod mod_env
a2enmod mod_ssl
a2enmod mod_php5
a2enmod mod_python
a2enmod mod_wsgi
a2enmod mod_cgi
a2enmod -l
rcapache2 restart
Virtual Hosts[Bearbeiten]
Allgemeines[Bearbeiten]
Das Verzeichnis für alle Virtual Host ist /etc/apache2/vhosts.d/. Wie Sie sehen gibt es zwei Konfigurationsdateien - eine mit ssl, die andere ohne ssl. Wir benutzen die Vorlage ohne Secure Sockets Layer. Nur Dateien mit dem Suffix ".conf" werden automatisch in die Apachekonfiguration einbezogen.
Wenn Sie neben Lawsuit einen weiteren eigenen Virtual Host hinzufügen möchten, ersetzen Sie in den folgenden Zeilen bitte Domainname durch ihren Verzeichnisnamen oder Ihre IP-Adresse.
- Es gibt mehrere Varianten für die Struktur, mit welcher der eigenen Server auf dem Rechner aufgesetzt werden kann. Folgende Optionen bieten sich an:
- namensbasiert
- IP-basiert
- portbasiert
- Sei können für Ihre Verzeichnisse die Vorlage vhost.template kopieren und als Ihre {DOMAINNAME}.conf speichern. Hier hinein tragen Sie anschließend die Unterverzeichnisse für Ihren Virtual Host ein.
Einstellungen für Lawsuit[Bearbeiten]
Für Lawsuit wird die Konfigurationsdatei jedoch im Unterverzeichnis lawsuit/settings bereits fertig zur Verfügung gestellt. Sie müssen lediglich in der genannten Datei den Platzhalter durch den eigenen Nutzernamen ersetzen und die fertige Datei in das Vhosts-Verzeichnis verlinken. Wechseln Sie in das Unterverzeichnis lawsuit/settings. Wenn Sie Lawsuit in Ihrem Nutzerhauptverzeichnis installiert haben, gelangen Sie mit diesem Befehl dorthin:
Erstellen Sie dort eine Konfigurationsdatei aus der Vorlage lawsuit-httpd.template und ersetzen Sie den darin enthaltenen Platzhalter meinpfad dabei durch Ihren Pfad zum aktuellen Verzeichnis. Dies erfolgt automatisiert durch diese Befehle:
> sed "s/meinpfad/$pfad/g" lawsuit-httpd.template > lawsuit-httpd.conf
Falls Ihr Pfad zum Ordner Documents nicht mit dem soeben ermittelten Pfad für lawsuit identisch ist, passen Sie diese Einstellungen für das Verzeichnis Documents bitte in der lawsuit-httpd.conf mit einem Editor wie kate von Hand an.
Abschließend kopieren Sie die erstellte Konfigurationsdatei als Superuser in das Verzeichnis der Virtual Hosts von Apache:
- Neustart von Apache
Anpassen der Konfiguration[Bearbeiten]
Um Ergänzungen oder Änderungen einheitlich für alle Virtual Hosts an der Datei /etc/apache2/default-server.conf vorzunehmen, editieren Sie die Konfigurationsvariable APACHE_CONF_INCLUDE_FILES mithilfe von
YaST > etc/sysconfig-Editor
oder arbeiten direkt in der Textdatei /etc/sysconfig/apache2. Zum Verständnis der Hierarchie und des Layouts um Dateien einzubeziehen, lesen Sie die Kommentierung im Kopf der httpd.conf. Die ursprüngliche, einfache Konfigurationsdatei mit nur 40K findet sich notfalls unter /usr/share/doc/packages/apache2/httpd-std.conf-prefork.
Optional: Ein Zertifikat für localhost erstellen[Bearbeiten]
Bei Mehrplatzsystemen funktionieren die Javascript-Voreintragungen bei Nutzung einer sicheren HTTPS-Verbindung nur, wenn ein eigenes Zertifikat erstellt wird, dessen Aussteller zudem noch aus vertrauenswürdig eingestuft werden muss.OpenSSL bringt umfassende Werkzeuge mit, um eine eigene, kleine Certificate Authority (CA) betreiben zu können.
Vergabe einer Domain für den Rechner mit den Lawsuit-Daten[Bearbeiten]
Unter yast2 > Netzwerkdienste > Rechnernamen fügen Sie unter der Zeile "localhost" eine Zeile mit folgenden Daten ein:
IP-Adresse: 192.168.2.10 Hostnamen: k1.local Aliasnamen: k1
Sie können statt "k1" eine beliebe andere Bezeichnung für den Hauptrechner wählen, müssen dann aber Ihre Domain in den folgenden Einstellungen beibehalten.
Certificate Authority (CA) erstellen[Bearbeiten]
Zu Beginn wird die Certificate Authority generiert. Zunächst wird ein geheimer Private Key erzeugt:
Der Key trägt den Namen “rootCA.pem” und hat eine Länge von 4096 Bit. Die Option “-aes256” führt dazu, dass der Key mit einem Passwort geschützt wird. Die Key-Datei der CA muss tatsächlich besonders gut geschützt werden. Ein Angreifer, der den Key in die Hände bekommt, kann beliebig gefälschte Zertifikate im Namen der Kanzlei ausstellen, denen die Clients trauen. Die Verschlüsselung dieses Keys mit einem Passwort gibt zusätzlichen Schutz. Das gewünschte Passwort wird bei der Generierung abgefragt. Einen geheimen Key für die CA gibt es damit also schon - es fehlt noch das Root-Zertifikat, das von den Clients später importiert werden muss, damit die von der CA ausgestellten Zertifikate im Browser als gültig erkannt werden. Das Root-Zertifikat “ca-root.pem” wird mit folgendem Befehl erzeugt:
In diesem Fall wird die CA 5483 Tage, also mit Schalttagen 15 Jahre lang gültig bleiben. Während der Generierung werden das Passwort für die CA und einige Attribute abgefragt (hier ein Beispiel):
Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Nordrhein-Westfalen Locality Name (eg, city) []:Muenster Organization Name (eg, company) [Internet Widgits Pty Ltd]:Kanzlei Hermanns Organizational Unit Name (eg, section) []:Rechtsanwalt Common Name (e.g. server FQDN or YOUR name) []:RA Matthias Hermanns Email Address []:hermanns@iustus.eu
Erzeugen des Schlüssels[Bearbeiten]
Mit diesen Daten wird auch eine Konfiguratunsdatei mit Namen ssl.cnf befüllt, die die Schlüsselausgabe später vereinfacht.
mkdir keys
cd keys
kate ssl.cnf
Die Datei kann beispielsweise den folgenden Inhalt haben
[req] # Standard-Verschlüsselung default_bits = 4096 # verhindere prompt für die Zertifikat-Erstellung # (Daten kommen aus dieser Datei) prompt = no # Verschlüsselungsmethode default_md = sha512 # Kryptographie abschalten encrypt_key = no # Sektion für Zertifizierer-Informationen: distinguished_name = dn # Zertifizierer-Informationen: [dn] # Länder-Code C=DE # Bundesland ST=Nordrhein-Westfalen # Stadt L=Muenster # Bezeichnung/Firmen-Name/Dein Name: O=Kanzlei Hermanns # Aussteller Name OU=RA Matthias Hermanns # E-Mail-Adresse emailAddress=hermanns@iustus.eu # Primärer Servername CN = k1 [v3_ca] keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = IP:192.168.2.10, DNS:k1, DNS:k1.local [ req_ext ] subjectAltName = @alt_names [alt_names] # Primärer Server-Name DNS.1 = k1 # Sekunärer Server-Name DNS.2 = k1.local # Wildcard Subdomains DNS.3 = *.k1.local
Speichern Sie die so erstellte Datei ssl.cnf im bin-Verzeichnis ab. Mit folgendem Befehl erzeugen Sie nun als zertifizierter Aussteller die eigentlichen Schlüssel für die SSL-Verbindung. Zunächst wird der RSA-Key mit 3072 Bit erzeugt (Asymmetrischer Schlüssel von Rivest, Shamir und Adleman, der einen privaten und einen öffentlichen Teil hat):
Nun folgt die Certificate Signing Request (CSR; deutsch Zertifikatsignierungsanforderung), ein digitaler Antrag, um mittels der soeben erzeugten digitalen Signatur und der zusätzlichen Identitätsangaben zum Antragstellers aus der ssl.cnf ein persönliches digitales Identitäts-Zertifikat (auch Public-Key-Zertifikat genannt) zu erstellen:
Mithilfe des Wurzelzertifikats vom verifizierten Aussteller (uns selbst) wird nun der eigentliche Schlüssel erstellt, damit eine Rückverfolgung zum Wurzelzertifikat möglich ist.
-in ~/bin/keys/k1.csr \
-CA /etc/ssl/certs/rootCA.pem \
-CAkey /etc/ssl/private/rootCA.key \
-CAcreateserial \
-out ~/bin/keys/k1.crt \
-days 3653 \
-extfile ~/bin/keys/ssl.cnf \
-extensions v3_ca
Damit die Zertifkate in unsere regelmäßige Sicherungsspeicherung aufgenommen werden, können wir sie in das Schlüsselverzeichnis keys unter lawsuit kopieren. Dies ist jedoch nur optional, weil es ein Sicherheitsrisiko eröffnet:
chmod 640 ~/bin/keys/k1.*
cp ~/bin/keys/k1.* ~/lawsuit/keys/
Verbindung mit dem Server[Bearbeiten]
Wenn Sie host-Datei lawsuit-httpd.conf automatisch wie oben vorgeschlagen generiert haben, sind die notwendigen Einstellungen schon voreingetragen und müssen nur auskommentiert werden. Ansonsten ergänzen Sie unter /etc/apache2/vhosts.d/ folgende Zeilen:
<VirtualHost *:80> ServerName k1 ServerAlias k1.local </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /home/BENUTZERNAME/lawsuit/ ServerName k1 ServerAlias k1.local ErrorLog /var/log/apache2/error_log SSLEngine on SSLCertificateFile /home/BENUTZERNAME/bin/keys/k1.crt SSLCertificateKeyFile /home/BENUTZERNAME/bin/keys/k1.key <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule> <FilesMatch "\.(cgi|html|shtml|pl|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /home/BENUTZERNAME/lawsuit/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule> # configuration SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2 SSLHonorCipherOrder off SSLSessionTickets off
Damit diese Einstellungen nicht der vom Linux-System vorgegebenen Konfiguration widersprechen, müssen in der Datei /usr/share/doc/packages/apache2/original/extra/httpd-ssl.conf noch folgende Zeilen auskommentiert und berichtigt werden
#ServerName www.example.com:443 ServerName k1:443
ferner
#SSLCertificateFile "/etc/apache2/server.crt" SSLCertificateFile "/home/BENUTZERNAME/bin/keys/k1.crt"
und
#SSLCertificateKeyFile "/etc/apache2/server.key" SSLCertificateKeyFile "/home/BENUTZERNAME/bin/keys/k1.key"
Unter Firefox kann das selbstgezeichnete Zertifikat nun verwendet werden. Bitte beachten Sie, dass für jede Apache-Konfigurrationsdatei ein anderer Port geöffnet werden muss, "443" also nur einmal verwendet werden kann. Sie können alternativ z.B. "4443" verwenden.
Abschließender Test und Neustart:
sudo systemctl restart apache2
Registrierung als vertrauenswürdiger Aussteller für den Firefox-Browser[Bearbeiten]
Damit der Firefox-Browser das Zertifikat tatsächlich verwendet und als vertrauenswürdig akzeptiert, muss es im Kleopatra-Schlüsseldienst eingetragen werden, auf den der Browser zugreift.
Klicken Sie den Reiter Importieren an und fügen Sie nacheinander die folgenden Dateien ein:
/home/BENUTZERNAME/bin/keys/k1.crt
/etc/ssl/certs/rootCA.pem
Bitte bestätigen Sie die erbetenen Beglaubigungen mit der Maustaste.
Nun wechseln Sie in den Firefox-Browser und geben in die Adresszeile ein
about:config
Dort ändern Sie die Variable
security.enterprise_roots.enabled -> true
von "false" auf "true". Nun bezieht der Browser auch Ihre eigenen CA-Beglaubigungen des Unternehmens eine seine Bewertungen mit ein und vergibt ein grünes Schlüsselsymbol.
Problembehebung[Bearbeiten]
Lesen Sie wenn möglich die Fehlermeldungen nach dem Start des Servers. Versuchen Sie Fehler ggf. zu reproduzieren und vergleichen Sie die Einträge in den Log-Dateien. Den Einblick auf die dortigen Meldungen können Sie mit dem folgenden Befehl auf den neuesten Stand reduzieren::
Da die Error-Messages schnell sehr großen Umfang einnehmen, der am Ende sogar den Systemstart blockieren kann, empfiehlt es sich, mit Logrotate den Bestand unter Kontrolle zu halten. Installieren Sie dazu, falls noch nicht vom System geschehen:
Sie können die Einstellungen in der Konfigurationsdatei
/etc/logrotate.conf
ändern. Eine typische Konfiguration von logrotate.conf sieht z.B. wie folgt aus:
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# remove rotated logs older than <count> days
maxage 90
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
compress
# comment these to switch compression to use gzip or another
# compression scheme
compresscmd /usr/bin/xz
uncompresscmd /usr/bin/xzdec
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
Sollten Sie einen Fehler gefunden haben, berichten Sie ihn bitte.
Weiterführende Informationen[Bearbeiten]
Verwandte Artikel[Bearbeiten]
- openSUSE Firewall
- Package documentation and example configuration files in /usr/share/doc/packages/apache2/