centos:webserver:1st_vers

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

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)
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]]**
 +
  
  • centos/webserver/1st_vers.txt
  • Zuletzt geändert: 20.04.2018 10:30.
  • (Externe Bearbeitung)