Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
centos:webserver:1st_vers [09.09.2011 21:12. ]
django
centos:webserver:1st_vers [20.04.2018 10:30. ] (aktuell)
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://www.apache.org|Apache Webservers]]. Nachfolgende Beschreibung zeigt, wie man unter CentOS 5 einen SSL geschützten virtuellen Host aufsetzen kann.
 +
 +==== 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:
 +<code># rpm -iql openssl
 +
 +Name        : openssl                      Relocations: (not relocatable)
 +...
 +
 +...
 +URL         : http://www.openssl.org/
 +Summary     : Das OpenSSL-Toolkit
 +Description :
 +Das OpenSSL-Toolkit liefert Support für die sichere Kommunikation
 +zwischen Computern. OpenSSL enthält ein zertifiziertes Management-Tool
 +und gemeinsam genutzte Bibliotheken, die verschiedene kryptografische
 +Algorithmen und Protokolle zur Verfügung stellen.
 +
 +/etc/pki/CA
 +/etc/pki/CA/private
 +/etc/pki/tls
 +/etc/pki/tls/cert.pem
 +/etc/pki/tls/certs
 +/etc/pki/tls/certs/Makefile
 +/etc/pki/tls/certs/ca-bundle.crt
 +/etc/pki/tls/certs/make-dummy-cert
 +/etc/pki/tls/misc
 +/etc/pki/tls/misc/CA
 +/etc/pki/tls/misc/c_hash
 +/etc/pki/tls/misc/c_info
 +/etc/pki/tls/misc/c_issuer
 +/etc/pki/tls/misc/c_name
 +/etc/pki/tls/openssl.cnf
 +/etc/pki/tls/private
 +
 +...</code>
 +=== mod_ssl ===
 +Die Konfiguration unseres Webserver erfolt über das Paket **mod_ssl**.
 +<code># rpm -iql mod_ssl
 +Name        : mod_ssl                      Relocations: (not relocatable)
 +...
 +
 +...
 +URL         : http://httpd.apache.org/
 +Summary     : SSL/TLS Modul für den Apache HTTP Server
 +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.
 +/etc/httpd/conf.d/ssl.conf
 +/usr/lib/httpd/modules/mod_ssl.so
 +/var/cache/mod_ssl</code>
 +==== 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 /etc/pki/tls/private/
 +== Zertifikatsregistrierungsanforderung ==
 +Damit unser digitales Zertifikat erstellt werden kann, benötigen wir ein CSR((Certificate Signing Request)), eine Textzeichenfolge, die wir mit Hilfe der SSL-Software **openssl** auf unserem zu zertifizierenden Servers erzeugen. Mit Eingabe eines Punktes **.** erzeugen wir dabei ein leeres Feld.
 +<code># openssl req -new -key private.key -out self-signed-cert.csr
 +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) [GB]:DE
 +State or Province Name (full name) [Berkshire]:Bayern
 +Locality Name (eg, city) [Newbury]:Pliening
 +Organization Name (eg, company) [My Company Ltd]:Nausch
 +Organizational Unit Name (eg, section) []:.
 +Common Name (eg, your name or your server's hostname) []:webmailer.nausch.org
 +Email Address []:michael@nausch.org
 +
 +Please enter the following 'extra' attributes
 +to be sent with your certificate request
 +A challenge password []:
 +An optional company name []:</code>
 +Auch hier passen wir die Dateiberechtigung an.
 +   # chmod 400 self-signed-cert.csr
 +Unseren //Certificate Signing Request// kopieren wir dann nach **// /etc/pki/tls/private/ //**.
 +   # cp self-signed-cert.csr /etc/pki/tls/private/
 +== Selbst signiertes Zertifikat ==
 +Zum Schluß erstellen wir uns nun unser eigenes Zertifikat mit Hilfe des Programms **openssl**.
 +<code># openssl x509 -req -days 3650 -in test-ca.csr -signkey private.key -out self-signed-cert.crt
 +Signature ok
 +subject=/C=DE/ST=Bayern/L=Pliening/O=Nausch/CN=webmailer.nausch.org/emailAddress=michael@nausch.org
 +Getting Private key</code>
 +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 /etc/pki/tls/certs
 +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, im speziellen von verschiedenen Orten/Rechnern mit unterschiedlichen Browsern, ist die Verwendung eines offiziellen Zertifikates angesagt. Als Beispiel eines "//bezahlbaren//" Zertifikates sei als Quelle [[https://www.thawte.com/ssl-digital-certificates/ssl123/index.html|SSL123 Certificate]] von [[https://www.thawte.com|Thawte]] genannt.\\
 +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 /etc/pki/tls/private/
 +== Zertifikatsregistrierungsanforderung ==
 +Damit von [[https://www.thawte.com|Thawte]] unser digitales Zertifikat erstellt werden kann, benötigen wir ein CSR((Certificate Signing Request)), eine Textzeichenfolge, die wir mit Hilfe der SSL-Software **openssl** auf unserem zu zertifizierenden Servers erzeugen. Mit Eingabe eines Punktes **.** erzeugen wir dabei ein leeres Feld.
 +<code># openssl req -new -key private.key -out self-signed-cert.csr
 +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) [GB]:DE
 +State or Province Name (full name) [Berkshire]:Bayern
 +Locality Name (eg, city) [Newbury]:Pliening
 +Organization Name (eg, company) [My Company Ltd]:Nausch
 +Organizational Unit Name (eg, section) []:.
 +Common Name (eg, your name or your server's hostname) []:webmailer.nausch.org
 +Email Address []:michael@nausch.org
 +
 +Please enter the following 'extra' attributes
 +to be sent with your certificate request
 +A challenge password []:
 +An optional company name []:</code>
 +Auch hier passen wir die Dateiberechtigung an.
 +   # chmod 400 self-signed-cert.csr
 +Unseren //Certificate Signing Request// kopieren wir dann nach **// /etc/pki/tls/private/ //**.
 +   # cp self-signed-cert.csr /etc/pki/tls/private/
 +Den Inhalt unseres **CSR** schicken wir nun Thawte, bzw. geben den Inhalt der Datei im Browserfenster bei der Bestellung ein.
 +== offizielles "Thawte" signiertes Zertifikat ==
 +Von Thawte erhalten wir dann unser Zertifikat, welches wir in einer einfachen Textdatei auf unserem Server ablegen.
 +   # vim /etc/pki/tls/certs/unser-offizieller-host.crt
 +Auch hier passen wir die Datei-Berechtigung an.
 +   # chmod 400 /etc/pki/tls/certs/unser-offizieller-host.crt
 +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:443
 +==== Konfiguration ====
 +=== Apache ===
 +Als erstes geben wir nun unserem System unsere Daten zum erstelten Zertifikat bekannt. Diese erden in der Datei **// /etc/httpd/conf.d/ssl.conf //** eingetragen.
 +  # vim /etc/httpd/conf.d/ssl.conf
 +<code apache ssl.conf>
 +
 +...
 +#   Server Certificate:
 +# Point SSLCertificateFile at a PEM encoded certificate.  If
 +# the certificate is encrypted, then you will be prompted for a
 +# pass phrase.  Note that a kill -HUP will prompt again.  A new
 +# certificate can be generated using the genkey(1) command.
 +SSLCertificateFile /etc/pki/tls/certs/self-signed-cert.crt
 +
 +#   Server Private Key:
 +#   If the key is not combined with the certificate, use this
 +#   directive to point at the key file.  Keep in mind that if
 +#   you've both a RSA and a DSA private key you can configure
 +#   both in parallel (to also allow the use of DSA ciphers, etc.)
 +SSLCertificateKeyFile /etc/pki/tls/private/private.key
 +
 +...
 +</code>
 +=== VHost ===
 +Am Anfang unserer VHost-Konfigurationsdatei **// /etc/httpd/conf.d/vhosts.conf //** tragen wir die Option **NameVirtualHost *:443** ein.
 +  # vim /etc/httpd/conf.d/vhosts.conf
 +<code apache vhosts.conf>
 +
 +# This configuration file enables the vhosts to this Server
 +
 +NameVirtualHost *:80
 +NameVirtualHost *:443
 +...
 +</code>
 +Bei der Definition unseres VHost geben wir an:
 +  # vim /etc/httpd/conf.d/vhosts.conf
 +<code apache vhosts.conf>
 +
 +...
 +#
 +# webmailer.nausch.org
 +# ssl verschlüsselt
 +#
 +<VirtualHost *:443>
 +        SSLEngine on
 +        SSLCertificateFile /etc/pki/tls/certs/self-signed-cert.crt
 +        SSLCertificateKeyFile /etc/pki/tls/private/private.key
 +        ServerName webmailer.nausch.org:443
 +        ServerAdmin webmaster@nausch.org
 +
 +...
 +</code>
 +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 /etc/sysconfig/iptables
 +
 +   -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 "//erlauben//" wir die Verwendung der **.htaccess** durch folgenden Eintrag in der _Directory_Directive_.
 +   AllowOverride All
 +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://meine.domäne.de/.*$ [NC]
 +RewriteCond %{REQUEST_FILENAME} \.(jpg|gif|png)$
 +RewriteRule ^.*$ - [F]
 +
 +</code>
 +==== Erfolgskontrolle ====
 +Wenn wir nun mit unserem Browser der Wahl die Seite unseres Content-Diebes aufrufen, können wir nun feststellen, dass in dem gezeigten Beispiel, die Deeplinks auf Bilder in unserem Webangebot erfolgreich unterbunden werden! 
 +
 +====== Links ======
 +  * **[[centos:webserver:start|Zurück zum Kapitel >>Webserverinstallation<<]]**
 +  * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**
 +  * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
 +