Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:webserver:1st_vers [09.09.2011 21:07. ] – django | centos:webserver:1st_vers [20.04.2018 10:30. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Apache Webserver ====== | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== SSL gesicherter Webserver ===== | ||
+ | Zur Absicherung unserer Privatsphäre bei unserem Webmailers möchten wir doch das Mitlesen unserer Daten (Authentifizierung wie auch Nachrichten) erschwehren. Hierzu nutzen mir das Modul **mod_ssl** unseres [[http:// | ||
+ | |||
+ | ==== Installation ==== | ||
+ | Die noch fehlenden Pakete **openssl** und **mod_ssl** installieren wir via yum. | ||
+ | # yum install openssl mod_ssl | ||
+ | ==== Paket-Informationen ==== | ||
+ | Mittels dem Befehl **rpm** informieren wir uns über den Inhalt der beiden Pakete und über die mitgebrachten Konfigurationsordner. | ||
+ | === openssl === | ||
+ | Als ersten sehen wir uns das Paket **openssl** näher an: | ||
+ | < | ||
+ | |||
+ | Name : openssl | ||
+ | ... | ||
+ | |||
+ | ... | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | Das OpenSSL-Toolkit liefert Support für die sichere Kommunikation | ||
+ | zwischen Computern. OpenSSL enthält ein zertifiziertes Management-Tool | ||
+ | und gemeinsam genutzte Bibliotheken, | ||
+ | Algorithmen und Protokolle zur Verfügung stellen. | ||
+ | |||
+ | /etc/pki/CA | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | |||
+ | ...</ | ||
+ | === mod_ssl === | ||
+ | Die Konfiguration unseres Webserver erfolt über das Paket **mod_ssl**. | ||
+ | < | ||
+ | Name : mod_ssl | ||
+ | ... | ||
+ | |||
+ | ... | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | The mod_ssl module provides strong cryptography for the Apache Web | ||
+ | server via the Secure Sockets Layer (SSL) and Transport Layer | ||
+ | Security (TLS) protocols. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | ==== SSL - Zertifikate ==== | ||
+ | === Selbstgeneriertes Zertifikat === | ||
+ | Zum ersten Testen und für Anwendungen im Intranet reicht ja unter Umständen ein **self-signed certificate**. | ||
+ | == Privater Schlüssel == | ||
+ | Als erstes generieren wir uns einen privaten Schlüssel. | ||
+ | # openssl genrsa -out pivate.key 1024 | ||
+ | Über die Dateiberechtigung schützen wir die Datei vor fremden Blicken. | ||
+ | # chmod 400 private.key | ||
+ | Dann kopieren wir diesen an die richtige Stelle. | ||
+ | # cp private.key / | ||
+ | == Zertifikatsregistrierungsanforderung == | ||
+ | Damit unser digitales Zertifikat erstellt werden kann, benötigen wir ein CSR((Certificate Signing Request)), eine Textzeichenfolge, | ||
+ | < | ||
+ | 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 ' | ||
+ | ----- | ||
+ | Country Name (2 letter code) [GB]:DE | ||
+ | State or Province Name (full name) [Berkshire]: | ||
+ | Locality Name (eg, city) [Newbury]: | ||
+ | Organization Name (eg, company) [My Company Ltd]:Nausch | ||
+ | Organizational Unit Name (eg, section) []:. | ||
+ | Common Name (eg, your name or your server' | ||
+ | Email Address []: | ||
+ | |||
+ | Please enter the following ' | ||
+ | to be sent with your certificate request | ||
+ | A challenge password []: | ||
+ | An optional company name []:</ | ||
+ | Auch hier passen wir die Dateiberechtigung an. | ||
+ | # chmod 400 self-signed-cert.csr | ||
+ | Unseren // | ||
+ | # cp self-signed-cert.csr / | ||
+ | == Selbst signiertes Zertifikat == | ||
+ | Zum Schluß erstellen wir uns nun unser eigenes Zertifikat mit Hilfe des Programms **openssl**. | ||
+ | < | ||
+ | Signature ok | ||
+ | subject=/ | ||
+ | Getting Private key</ | ||
+ | Wie schon zuvor passen wir auch hier die Berechtigung an. | ||
+ | # chmod 400 self-signed.crt | ||
+ | Und verschieben unser Zertifikat an die korrekte Stelle im System. | ||
+ | # cp self-signed-cert.crt / | ||
+ | Anschließend löschen wir die nicht mehr benötigen Dateien in unserem Arbeitsverzeichnis. | ||
+ | # rm private.key | ||
+ | # rm self-signed-cert.csr | ||
+ | |||
+ | |||
+ | === Offizielles Zertifikat === | ||
+ | Für die eigentliche Produktivumgebung, | ||
+ | Die grundlegende Herangehensweise entspricht, die unserem selbstsignierten Testzertifikat. | ||
+ | == Privater Schlüssel == | ||
+ | Als erstes generieren wir uns einen privaten Schlüssel. | ||
+ | # openssl genrsa -out pivate.key 1024 | ||
+ | Über die Dateiberechtigung schützen wir die Datei vor fremden Blicken. | ||
+ | # chmod 400 private.key | ||
+ | Dann kopieren wir diesen an die richtige Stelle. | ||
+ | # cp private.key / | ||
+ | == Zertifikatsregistrierungsanforderung == | ||
+ | Damit von [[https:// | ||
+ | < | ||
+ | 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 ' | ||
+ | ----- | ||
+ | Country Name (2 letter code) [GB]:DE | ||
+ | State or Province Name (full name) [Berkshire]: | ||
+ | Locality Name (eg, city) [Newbury]: | ||
+ | Organization Name (eg, company) [My Company Ltd]:Nausch | ||
+ | Organizational Unit Name (eg, section) []:. | ||
+ | Common Name (eg, your name or your server' | ||
+ | Email Address []: | ||
+ | |||
+ | Please enter the following ' | ||
+ | to be sent with your certificate request | ||
+ | A challenge password []: | ||
+ | An optional company name []:</ | ||
+ | Auch hier passen wir die Dateiberechtigung an. | ||
+ | # chmod 400 self-signed-cert.csr | ||
+ | Unseren // | ||
+ | # cp self-signed-cert.csr / | ||
+ | Den Inhalt unseres **CSR** schicken wir nun Thawte, bzw. geben den Inhalt der Datei im Browserfenster bei der Bestellung ein. | ||
+ | == offizielles " | ||
+ | Von Thawte erhalten wir dann unser Zertifikat, welches wir in einer einfachen Textdatei auf unserem Server ablegen. | ||
+ | # vim / | ||
+ | Auch hier passen wir die Datei-Berechtigung an. | ||
+ | # chmod 400 / | ||
+ | Anschließend löschen wir die nicht mehr benötigen Dateien in unserem Arbeitsverzeichnis. | ||
+ | # rm private.key | ||
+ | # rm self-signed-cert.csr | ||
+ | === SSL Zusatzbefehle === | ||
+ | Inhalt eines Zertifikates anzeigen (DER, PEM bzw. NET): | ||
+ | # openssl x509 -in filename -text -inform DER | ||
+ | Konvertierung vom **DER** ins **PEM** Format | ||
+ | # openssl x509 -in infile.name -inform DER -out outfile.name -outform PEM | ||
+ | Mit einem HTTPS-Server verbinden und sich das Certifikat und dessen Zertifikatskette anzeigen lassen. | ||
+ | # openssl s_client -showcerts -connect www.m-net.de: | ||
+ | ==== Konfiguration ==== | ||
+ | === Apache === | ||
+ | Als erstes geben wir nun unserem System unsere Daten zum erstelten Zertifikat bekannt. Diese erden in der Datei **// / | ||
+ | # vim / | ||
+ | <code apache ssl.conf> | ||
+ | |||
+ | ... | ||
+ | # | ||
+ | # Point SSLCertificateFile at a PEM encoded certificate. | ||
+ | # the certificate is encrypted, then you will be prompted for a | ||
+ | # pass phrase. | ||
+ | # certificate can be generated using the genkey(1) command. | ||
+ | SSLCertificateFile / | ||
+ | |||
+ | # | ||
+ | # If the key is not combined with the certificate, | ||
+ | # | ||
+ | # | ||
+ | # both in parallel (to also allow the use of DSA ciphers, etc.) | ||
+ | SSLCertificateKeyFile / | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | === VHost === | ||
+ | Am Anfang unserer VHost-Konfigurationsdatei **// / | ||
+ | # vim / | ||
+ | <code apache vhosts.conf> | ||
+ | |||
+ | # This configuration file enables the vhosts to this Server | ||
+ | |||
+ | NameVirtualHost *:80 | ||
+ | NameVirtualHost *:443 | ||
+ | ... | ||
+ | </ | ||
+ | Bei der Definition unseres VHost geben wir an: | ||
+ | # vim / | ||
+ | <code apache vhosts.conf> | ||
+ | |||
+ | ... | ||
+ | # | ||
+ | # webmailer.nausch.org | ||
+ | # ssl verschlüsselt | ||
+ | # | ||
+ | < | ||
+ | SSLEngine on | ||
+ | SSLCertificateFile / | ||
+ | SSLCertificateKeyFile / | ||
+ | ServerName webmailer.nausch.org: | ||
+ | ServerAdmin webmaster@nausch.org | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | Anschließend starten wir unseren Webmailer einmal durch, damit dieser unsere Änderungen übernehmen kann. | ||
+ | |||
+ | ==== Paketfilter ==== | ||
+ | Damit unser Webserver Anfragen auf Port **443** auch annehmen kann, öffnen wir noch den Port **** im Paktefilter. | ||
+ | # vim / | ||
+ | |||
+ | -A INPUT -i eth3 -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT | ||
+ | Ein restart unserer Firewall öffnet schließlich den Port. | ||
+ | # service iptables restart | ||
+ | ===== Deeplinks unterbinden ===== | ||
+ | Überaus nette Zeitgenossen meinen zu Weilen, Inhalte eines Webservers für eigene Zwecke **__ohne__** Authorisierung zu verwenden. In der Regel werden dabei Graphiken geklaut. Dies unterbinden wir durch eine kleine Änderung in unserer Konfiguration. | ||
+ | ==== VHost anpassen ==== | ||
+ | In unserer VHostdefinition "// | ||
+ | | ||
+ | Anschließend starten wir unseren Apache-Webserver einmal durch. | ||
+ | ==== .htaccess ==== | ||
+ | In unserem V-Host Verzeichnis legen wir uns nun eine Datei **.htaccess** an. | ||
+ | # vim .htaccess | ||
+ | <code apache .htaccess> | ||
+ | |||
+ | RewriteEngine On | ||
+ | RewriteCond %{HTTP_REFERER} !^$ | ||
+ | RewriteCond %{HTTP_REFERER} !^http:// | ||
+ | RewriteCond %{REQUEST_FILENAME} \.(jpg|gif|png)$ | ||
+ | RewriteRule ^.*$ - [F] | ||
+ | |||
+ | </ | ||
+ | ==== Erfolgskontrolle ==== | ||
+ | Wenn wir nun mit unserem Browser der Wahl die Seite unseres Content-Diebes aufrufen, können wir nun feststellen, | ||
+ | |||
+ | ====== Links ====== | ||
+ | * **[[centos: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||
+ | |||