Protokolle höherer Schichten
Transcription
Protokolle höherer Schichten
Protokolle höherer Schichten Autor MatNr : : Sami AYDIN 5002232 Dozent : Prof. Dr. Gilbert Brands Aufgabe : Richten Sie einen HTTPS-Server ein. Erstellen Sie mit OpenSSL ein rootZertifikat und ein Serverzertifikat und installieren Sie die Zertifikate. Erstellen Sie ebenfalls ein Zertifikat für einen Client und installieren Sie dies in einem Browser. Stellen Sie den Server auf bidirektionale Authentifizierung ein und erstellen Sie ein PHP-Programm, dass den Client über das Zertifikat identifiziert. Inhalt 1.HTTP / HTTPS ................................................................................................................. 3 2. Zertifikate......................................................................................................................... 4 2.1 Erstellen der CA ......................................................................................................... 4 2.2 Schlüssel für das Serverzertifikat erzeugen ............................................................... 5 2.2.1 Selbstsigniertes Zertifikat erzeugen .................................................................... 5 2.2.2 Certificate Signing Request (CSR) erzeugen ...................................................... 6 2.3 Client- Zertifikat erzeugen .......................................................................................... 7 2.3.1 Certificate Signing Request (CSR) erzeugen. ..................................................... 7 2.3.2 Den CSR der Root-CA vorlegen und unterschreiben .......................................... 8 2.3.3 Client –Zertifikat Konvertieren ............................................................................. 9 3. Zertifikat im Browser importieren ................................................................................... 10 4. Authentifizierung ............................................................................................................ 12 4.1 Passwort-Authentifizierung ...................................................................................... 12 4.2 Schlüsselpaar- Authentifizierung ............................................................................. 15 5.Fazit................................................................................................................................ 18 6.Literatur .......................................................................................................................... 18 2 1.HTTP / HTTPS Auf dem Laptop ist Suse 10.2 vorinstalliert. Über den Installationsmanager YAST kann XAMPP nachinstalliert werden. Die Linuxdateien müssen unter XAMPP umbenannt werden und anschließend ein Link auf die Dateien gelegt werden. localhost:/opt/lampp/etc/zertifikate # mv /usr/bin/openssl /usr/bin/openssl.suse localhost:/opt/lampp/etc/zertifikate # ln -s /opt/lampp/bin/openssl /usr/bin/openssl localhost:/opt/lampp/etc/zertifikate # mv /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf.suse localhost:/opt/lampp/etc/zertifikate # ln -s /opt/lampp/etc/openssl.cnf /etc/ssl/openssl.cnf localhost:/opt/lampp/etc/zertifikate # mv /etc/apache2/httpd.conf /etc/apache2/httpd.conf.suse localhost:/opt/lampp/etc/zertifikate # ln -s /opt/lampp/etc/httpd.conf /etc/apache2/httpd.conf Wenn ein Web-Browser eine Webseite anzeigen will, stellt er mit dem in der URL bezeichneten Server eine Verbindung her, um den Seiteninhalt zu holen. Sobald TCP – Verbindung steht, sendet der Browser eine HTTP- Anfrage, mit der er den Webserver um Herausgabe des gewünschten Dokuments bittet. Der Webserver sendet eine Antwort mit dem Seiteninhalt und schließt die Verbindung. Um einen Webserver sicher zu machen, Verschlüsslung spielt eine wichtige Rolle, Verschlüsslung läuft auf HTTPS. Wenn ein HTTP-Server über einen verschlüsselten Kanal kommuniziert, bildet ein HTTPS. HTTPS dient zur Verschlüsselung und zur Authentifizierung der Kommunikation zwischen Webserver und Browser. Der verschlüsselte Kanal wird von SSL (Secure Socket Layer) oder von seinem Nachfolger TLS (Transport Layer Security) Protokoll bereitgestellt. SSL Verbindung wie da unten an den bild sieht. Browser und Server kommuniziert mit einem Handshake. Der Handshake hat auch ein Clientzertifikat, mit dem sich Client beim Server authentifiziert und Standard-HTTPS-Port ist 443. Verbindung zwischen Browser und Webserver Öfnen von https//:localhost Zertifikat der CA Signatur des Webserver prüfen Übertragen des Webserver-Zertifkat WebserverZertifikate zum Browser Prüfung(localhost von Server geprüft, in php rein geschreiben) Sitzung Schlüssel verschlüsseln Übertragen des verschlüsselten Sitzunschlüssel Zum Webserver Privatschlüssel des Webserver entschlüsseln Sitzung Schlüssel SSL Der Daten mit dem ausgahandelten sitzungsschlüssel Web Browser Webserver localhost 3 Zur Einrichtung eines HTTP-Servers müssen privater Schlüssel auf dem Server generiert werden. Am einfachsten kann man dies mit openssl. Openssl implementiert die Netzwerkprotokolle Secure Socket Layer (SSL) und Transport Layer Security (TSL). 2. Zertifikate Ein Zertifikat ist eine digitale Bescheinigung des Ausweises. Die Struktur und Aufbau wird in der Praxis bei X.509 Standart festgelegt. Das heißt, dass ein Zertifikat den Namen des Signierschlüsselinhabers, den zugeordneten öffentlichen Signierschlüssel, die verwendeten Algorithmen, den Gültigkeitszeitraum des Zertifikates und den Namen der Zertifizierungsstelle enthalten muss. Der CA (Certification Authority) bietet Dienste zu Ausstellung von Zertifikaten an. Ihre Aufgabe ist es, zu bescheinigen, dass eine Website tatsächlich diejenige ist. Jeder Browser verfügt über einen eingebauten Katalog mit CA- Zertifikaten, ob Serverzertifikate von einer vertrauenswürdigen CA signiert wurden. 2.1 Erstellen der CA Die CA enthält einen geheimen Schlüssel, welcher automatisch erzeugt und in der Datei cakey.pem abgelegt wird. Das CA-Zertifikat wird nach cacert.pem geschrieben. Der Schlüssel soll auf hohe Sicherheit (Länge 1024 Bit) eingestellt sein. Die Gültigkeit setzen wir mit 10 Jahren an. Der folgende Befehl erzeugt das Zertifikat: localhost:/opt/lampp/etc/zertifikat # openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 3650 Generating a 1024 bit RSA private key ......++++++ ................++++++ writing new private key to 'cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----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) [AU]:De 4 State or Province Name (full name) [Some-State]:Niedersachsen Locality Name (eg, city) []:Emden Organization Name (eg, company) [Internet Widgits Pty Ltd]:Informatik Organizational Unit Name (eg, section) []:Protokolle Common Name (eg, YOUR name) []:localhost Email Address []:saydin@technik-emden.de Wer den geheimen Schlüssel der CA kennt, kann damit beliebige Serverzertifikate signieren. Deshalb wird diese Schlüsseldatei nicht im Klartext auf der Festplatte abgelegt, sondern mit einer Passphrase verschlüsselt. Diese Passphrase benötigen Sie immer dann, wenn Sie mit der CA neue Zertifikate ausstellen wollen. Im Anschluss befindet sich das für einen Zeitraum von zehn Jahren gültige Zertifikat in der Datei cacert.pem, das RSA-Schlüsselpaar in der Datei cakey.pem. Req New x509 keyout Days Out 3650 stellt einen Request für ein Zertifikat zeigt an, dass es sich um einen Request für ein neues Zertifikat handelt sorgt dafür, dass statt einem Request ein selbstsigniertes Zertifikat erzeugt wird Datei, in die der neu erzeugte Schlüssel geschrieben wird Gültigkeit des Zertifikats in Tagen schreibt den Schlüssel in eine Datei für 10 jahren 2.2 Schlüssel für das Serverzertifikat erzeugen Die Erstellung der Server Schlüssel in OpenSSL wie da unten geschriben. localhost:/opt/lampp/etc/zertifikat # openssl genrsa -des3 -out server.key 1024 -days 3650 Generating RSA private key, 1024 bit long modulus ..............................++++++ .....++++++ e is 65537 (0x10001) Enter pass phrase for server.key: Verifying - Enter pass phrase for server.key: genrsa des3 1024 erstellt ein privates RSA Schlüssel. Wenn man -des3 weglässt wird der Schlüssel ohne eine Passphrase erzeugt. ist die Größe des Schlüssels in Bit 2.2.1 Selbstsigniertes Zertifikat erzeugen Mit neuem privatem Schlüssel erstellt eine Zertifikatsanforderung für CA. Hier erstellen wir kein selbstsigniertes Zertifikat, nur Zertifikatsanforderungen. localhost:/opt/lampp/etc/zertifikat # openssl req -new -key server.key -out server.csr Enter pass phrase for server.key: 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 5 For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [AU]:De State or Province Name (full name) [Some-State]:Niedersachsen Locality Name (eg, city) []:Emden Organization Name (eg, company) [Internet Widgits Pty Ltd]:Informatik Organizational Unit Name (eg, section) []:Protokolle Common Name (eg, YOUR name) []:localhost Email Address []:saydin@informatik-emden.de Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: localhost:/opt/lampp/etc/zertifikat # cp server.key server.key.org localhost:/opt/lampp/etc/zertifikat # openssl rsa -in server.key.org -out server.key Enter pass phrase for server.key.org: writing RSA key key der Schlüssel, mit dem das Zertifikat signiert wird 2.2.2 Certificate Signing Request (CSR) erzeugen localhost:/opt/lampp/etc/zertifikat # openssl x509 -req -days 3650 -in server.csr -signkey server.key Signature ok subject=/C=De/ST=Niedersachsen/L=Emden/O=Informatik/OU=Protokolle/CN=localhost/emailAddress=saydin@info Getting Private key server.key und server.crt müssen natürlich unter richtigem Verzeichnen sein, die beiden Dateien werden kopiert. localhost:/opt/lampp/etc/zertifikat # cp server.crt /opt/lampp/etc/ssl.crt/ localhost:/opt/lampp/etc/zertifikat # cp server.key /opt/lampp/etc/ssl.key/ localhost:/opt/lampp/etc/zertifikat # cd.. wenn kein newcerts Ordner gibt’s, der muss auch erstellt werden. localhost:/opt/lampp/etc # cd newcerts bash: cd: newcerts: No such file or directory localhost:/opt/lampp/etc # mkdir newcerts localhost:/opt/lampp/etc # cd zertifikat/ localhost:/opt/lampp/etc/zertifikat # dir -rw-r--r-- 1 root root 1354 Mar 31 23:21 cacert.pem -rw-r--r-- 1 root root 963 Mar 31 23:21 cakey.pem -rw-r--r-- 1 root root 1001 Mar 31 23:42 server.crt -rw-r--r-- 1 root root 725 Mar 31 23:33 server.csr -rw-r--r-- 1 root root 887 Mar 31 23:37 server.key -rw-r--r-- 1 root root 963 Mar 31 23:36 server.key.org localhost:/opt/lampp/etc # touch /opt/lampp/etc/index.txt localhost:/opt/lampp/etc # touch /opt/lampp/etc/serial; echo 01 > /opt/lampp/etc/serial 6 Der Datei index.txt ist wie eine Datenbank, der enthält Liste der bereits ausgestellten Zertifikate. cakey.pem privater Schlüssel der CA cacert.pem selbstzertifziertes Zertifikat der CA Server.key Ist ein Private Schlüssel Server.crt Ist ein Zertifikat Server.csr Vorstufe zu ein Zertifikat (Certificate Signing Request) index.txt Liste der bereits ausgestellten Zertifikate Serial Seriennummer für das nächste Zertifikat newcerts Verzeichnis für erstellte Zertifikate 2.3 Client- Zertifikat erzeugen Zuerst muss man für jeden Client / jedes Zertifikat wieder einen privaten Schlüssel erzeugen. localhost:/opt/lampp/etc/zertifikat # openssl genrsa -des3 -out client.key 2048 Generating RSA private key, 2048 bit long modulus ............+++ ..................................................................................+++ e is 65537 (0x10001) Enter pass phrase for client.key: Verifying - Enter pass phrase for client.key: 2.3.1 Certificate Signing Request (CSR) erzeugen. localhost:/opt/lampp/etc/zertifikat # openssl req -new -key client.key -out client.csr Enter pass phrase for client.key: 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. ----- Dies erzeugt eine Datei mit dem Namen client.csr mit dem Namen client.key SchlüsselDatei. Wird folgende Informationen eingetragen. Country Name (2 letter code) [AU]:De 7 State or Province Name (full name) [Some-State]:Niedersachsen Locality Name (eg, city) []:Emden Organization Name (eg, company) [Internet Widgits Pty Ltd]:Informatik Organizational Unit Name (eg, section) []:Protokolle Common Name (eg, YOUR name) []:localhost Email Address []:saydin@et-inf.fho-emden.de Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: 2.3.2 Den CSR der Root-CA vorlegen und unterschreiben Den CSR der Root-CA vorlegen und unterschreiben / verifizieren lassen (die Root-CA bestätigt damit, daß die Angaben im Zertifikat der Wahrheit entsprechen), Das Signieren eines einzelnen Requests kann durch folgenden Befehl erstellt werden. localhost:/opt/lampp/etc/zertifikat # openssl ca -in client.csr -out client.crt Using configuration from /opt/lampp/share/openssl/openssl.cnf Enter pass phrase for /opt/lampp/etc/zertifikat/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Mar 31 21:56:54 2008 GMT Not After : Mar 29 21:56:54 2018 GMT Subject: countryName = De stateOrProvinceName = Niedersachsen organizationName = Informatik organizationalUnitName = Protokolle commonName = localhost emailAddress = saydin@et-inf.fho-emden.de X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: A4:BA:2C:91:32:9D:69:77:C3:FD:83:09:6A:5E:5E:AD:51:14:91:07 X509v3 Authority Key Identifier: keyid:79:D7:60:6C:89:02:25:46:CF:08:99:D0:0B:94:3E:51:3C:A6:DC:6B Certificate is to be certified until Mar 29 21:56:54 2018 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated 8 ca Zertifikat der CA, die das Zertifikat signiert. Hier wird Privaten Schlüssel und das Zertifikat in ein Datei geschrieben. Also zuerst brauchen wir diese Datei, die beides enthält, und dann können wir die konvertieren. localhost:/opt/lampp/etc/zertifikat # cp client.crt client_p.crt localhost:/opt/lampp/etc/zertifikat # cat client.key >> client_p.crt localhost:/opt/lampp/etc/zertifikat # less client_p.crt 2.3.3 Client –Zertifikat Konvertieren Das Zertifikat, in den Browser des zu autorisierenden Benutzer importieren kann, man muss unsere Ezeugnis konvertieren. localhost:/opt/lampp/etc/zertifikat # openssl pkcs12 -export -in client_p.crt -out client_post.p12 Enter pass phrase for client_p.crt: Enter Export Password: Verifying - Enter Export Password: "client_post.p12" ist hier ein wahlfreier Name, allerdings erwarten die meisten Browser die Endung .p12 . pkcs12 export out in erstellt eine Datei nach Standard PKCS#12 gibt an, dass eine PKCS#12-Datei erzeugt werden soll. Dateiname für die PKCS#12-Datei Zertifikat, dass in den PKCS#12-Container geschrieben werden soll dann editieren wir unter /opt/lampp/etc/extra/httpd-ssl.conf SSLCACertificateFile muss auf Server –Zertifikat verweisen. httpd-ssl.conf #httpd-ssl.conf SSLCACertificateFile /opt/lampp/etc/ssl.crt/server.crt # Certificate Revocation Lists (CRL): # Set the CA revocation path where to find CA CRLs for client # authentication or alternatively one huge file containing all # of them (file must be PEM encoded) # Note: Inside SSLCARevocationPath you need hash symlinks # to point to the certificate files. Use the provided # Makefile to update the hash symlinks after changes. #SSLCARevocationPath /opt/lampp/etc/ssl.crl #SSLCARevocationFile /opt/lampp/etc/ssl.crl/ca-bundle.crl # Client Authentication (Type): # Client certificate verification type and depth. Types are # none, optional, require and optional_no_ca. Depth is a # number which specifies how deeply to verify the certificate # issuer chain before deciding the certificate is not valid. SSLVerifyClient require SSLVerifyDepth 9 Xammp starten. localhost:/opt/lampp/etc/zertifikat # /opt/lampp/lampp start Starting XAMPP for Linux 1.6.6... XAMPP: Starting Apache with SSL (and PHP5)... XAMPP: Another MySQL daemon is already running. XAMPP: Another FTP daemon is already running. XAMPP for Linux started. So weit funktioniert alles. 3. Zertifikat im Browser importieren Ein Verbindungsversuch mit einem derart vorbereiteten Browser zu unserem Server funktioniert jetzt. Der Browser ohne importiertes Zertifikat gibt Fehlermeldung. localhost has received an incorrect or unexpected message. Error Code: -12227 Jetzt importieren wir das Zertifikat im Browser Konqueror. Konqueror ist ein Browser, die in Standart Suse-Linux-KDE enthält. Über gelben Schlüssel wird geklickt und dann nächste Cryptography Configuration. Importieren die Zertifikate unterscheidet sich beim jeder Browser. Abbildung 1: Browser Konqueror 10 An der Configure – KDE Control Module gibt es verschiedene Tabs, unsere Client Zertifikat zu importieren wird Your Certifikates Tabs genommen. Abbildung 2: Zertifikat in "Your Certifikat" importieren Nachdem importiertes Datei(Client_postconv.p12) da sieht man Informationen uns gehört. 11 Abbildung 3: Import Client_postconv.p12 oder die folgende Schritte wird gemacht. View > Security > Cryptography Configuration >Your Certificates > import Datei “Client_postconv.p12” und ok. 4. Authentifizierung Authentifizierung verwendet der Benutzer oder Gerät durch die Kenntnis eines Geheimnisses authentifizieren. Es überprüft der Benutzer wirklich der ist, es gibt zwei Verfahren. Erste Benutzername und Passwort, die zweite mit einem Schlüsselpaar. 4.1 Passwort-Authentifizierung Bei der Passwort-Authentifizierung fordert der Webserver vom Browser Benutzerkennung und Kennwort an. Sie werden unverschlüsselt als BASE64-kodierter String übertragen. Mit htpasswd2 werden die User und Passwörter addiert. Der Benutzer Name und Passwörter wird aus httpd.passwd Textdatei gelesen. 12 htpasswd2 -c /opt/lampp/etc/zertifikat/httpd.passwd sami New password: Re-type new password: Adding password for user sami Man legt die Datei (httpd.passwd) an und trägt dabei gleich den User Name (hier wird sami eingetragen.) ein. Das Programm fragt ein Passwort und legt es verschlüsselt ab. Die Zeilen werden in der Datei „httpd-ssl.conf“ rein geschrieben. SSLVerifyClient none <Directory "/opt/lampp/htdocs"> SSLVerifyClient require SSLVerifyDepth 5 SSLCACertificateFile /opt/lampp/etc/zertifikat/cacert.pem SSLCACertificatePath /opt/lampp/etc/zertifikat SSLOptions +FakeBasicAuth SSLRequireSSL AuthName User AuthType Basic AuthUserFile /opt/lampp/etc/zertifikat/httpd.passwd require valid-user </Directory> Direktiven: SSLVerifyClient Schlüsselwort kann auf vier verschiedene arten konfiguriert werden. SSLVerifyClient none | optional | require | require_no_ca none - Der Client braucht kein Zertifikat; falls er eines mitschickt, wird es nicht beachtet. optional - Der Client kann mit seiner Anfrage ein Zertifikat schicken; in diesem Fall wird es untersucht. require - Der Client muss ein gültiges Zertifikat senden. require_no_ca - Der Client muss ein Zertifikat senden, aber es braucht nicht von einer vertrauenswürdigen Zertifizierungsstelle (CA) unterzeichnet worden zu sein. SSLVerifyDepth Mit Hilfe der Direktive SSLVerifyDepth können Sie bestimmen, wie viele Stufen eines Zertifizierungspfades auf der Suche nach einem vertrauenswürdigen Unterzeichner von Client-Zertifikaten untersucht werden sollen. Ein zu hoher Wert verlangsamt den Server, ein zu niedriger führt eventuell zur unberechtigten Ablehnung von Clients. SSLVerifyDepth ANZAHL SSLCACertificateFile /opt/lampp/etc/zertifikat/cacert.pem Die Direktive weist auf die Datei mit dem CA – Zertifikat. CA - Zertifikate werden benötigt, 13 um eine Client- Zertifikatprüfung durchzuführen. SSLCACertificatePath /opt/lampp/etc/zertifikat Verzeichnespfad auf Verzeichnis, dem Server Zugriff auf CA – Zertifikate zu geben. Für Verzeichnespfad müssen alle Zertifikate einzeln in das benannte Verzeichnis kopiert werden. SSLOptions Der Wert von SSLOptions ist eine durch Leerzeichen getrennte Liste verschiedener Optionen. Wenn Sie Optionen ohne Präfix verwenden, werden alle Optionen aus dem übergeordneten Kontext durch diese ersetzt. Wenn Sie einer Option das Präfix + voranstellen, wird sie zu den aus dem übergeordneten Kontext geerbten Optionen hinzugefügt. FakeBasicAuth: Aus dem Anbieter-DN wird ein einfacher Username extrahiert, damit die Direktiven zur Basic-Authentifizierung eingesetzt werden können. Das Passwort wird nicht vom Benutzer erfragt, sondern lautet immer "password". SSLRequireSSL Die Direktive SSLRequireSSL besitzt keinen Wert, sondern wirkt durch ihre bloße Anwesenheit. Wenn sie gesetzt wird, bedeutet dies, dass auf die aktuelle Ressource nur über SSL, aber nicht über eine normale HTTP-Verbindung zugegriffen werden darf. Also Zugriff nur über SSL freigegeben. AuthName Diese Information wird den Benutzern im Anmeldedialog gezeigt; auf dieser Basis können sie entscheiden, welcher Benutzername und welches Passwort erforderlich sind. AuthType Möglich sind die Werte Basic oder Digest. Basic: Klartextübertragung der Anmeldedaten, genauer gesagt base64-codiert Digest: für MD5-verschlüsselte Übertragung. Dementsprechend muss die Überprüfung der Anmeldedaten durch unterschiedliche Module durchgeführt werden: Für die Basic-Authentifizierung kann mod_auth verwendet werden, das die Anmeldedaten in einfachen Textdateien speichert. AuthType Basic|Digest AuthUserFile Mit Hilfe der Direktive AuthUserFile wird der Pfad einer Textdatei mit Benutzernamen und Kennwörtern angegeben AuthUserFile /opt/lampp/etc/zertifikat/httpd.passwd Für den ersten Benutzer wird die Option -c verwendet, um die Datei neu zu erstellen. Beispiel: 14 # htpasswd2 -c httpd.passwd sami New password: Re-type new password: Adding password for user sami 4.2 Schlüsselpaar- Authentifizierung Die Direktive zu Prüfung mit die Organization Name und Organizational Unit Name sieht so aus. SSLVerifyClient none <Directory "/opt/lampp/htdocs"> SSLVerifyClient require SSLVerifyDepth 5 SSLCACertificateFile /opt/lampp/etc/zertifikat/cacert.pem SSLCACertificatePath /opt/lampp/etc/zertifikat SSLOptions +FakeBasicAuth SSLRequireSSL SSLRequire %{SSL_CLIENT_S_DN_O} eq "Informatik" \ and %{SSL_CLIENT_S_DN_OU} in {"Protokolle", "CA", "Dev"} </Directory> Wenn das Zertifikat in Organization Name „Informatik“ und Organizational Unit Name „Protokolle“ enthält. SSLRequire Die Direktive bietet unzählige Möglichkeiten der Zugriffsbeschränkung. Enthält folgende Elemente: %{VARIABLE}: der Wert der angegebenen SSL- Umgebungsvariablen wird ermittelt. SSL_CLIENT_S_DN_O: Organization Name SSL_CLIENT_S_DN_OU: Organizational Unit Name eq: Gleichheit in : {Element1, [Element2, ...]}: in der Liste vorhanden. http://buecher.lingoworld.de/apache2/dirs.php?o=mod Die Verbindung mit Http-Server sieht so aus. 15 Abbildung 4: Verbindung mit HTTP Verbindung mit HTTPS-Server, wie man auf dem Bild sieht, Browser hat zwei gelbes Schloss, das heißt, die Verbindung über SLL gestaltet. Abbildung 5: Verbindung mit HTTPS 16 Quellcode den Index.php sieht so aus. <?php echo "CLIENT <br>"; echo "_________________________________________<br>"; echo "Issuer: " . $_SERVER['SSL_CLIENT_I_DN']; echo "<br>"; echo "Subject: " . $_SERVER['SSL_CLIENT_S_DN']; echo "<br>"; echo "Validity Start: " . $_SERVER['SSL_CLIENT_V_START']; echo "<br>"; echo "Validity End: " . $_SERVER['SSL_CLIENT_V_END']; echo "<br><br> SERVER <br>"; echo "_________________________________________<br>"; echo "Issuer: " . $_SERVER['SSL_SERVER_I_DN']; echo "<br>"; echo "Subject: " . $_SERVER['SSL_SERVER_S_DN']; echo "<br>"; echo "Validity Start: " . $_SERVER['SSL_SERVER_V_START']; echo "<br>"; echo "Validity End: " . $_SERVER['SSL_SERVER_V_END']; ?> Erzeugten Variablen: SSL_CLIENT_I_DN SSL_CLIENT_S_DN SSL_CLIENT_V_START SSL_CLIENT_V_END :Aussteller-DN des Client-Zertifikats :Subjekt-DN im Client-Zertifikat :Gültigkeit des Client-Zertifikats (Beginn) :Gültigkeit des Client-Zertifikats (Ablauf) SSL_SERVER_I_DN SSL_SERVER_S_DN SSL_SERVER_V_START SSL_SERVER_V_END :Aussteller-DN des Serverzertifikats :Subjekt-DN im Serverzertifikat :Gültigkeit des Serverzertifikats (Beginn) :Gültigkeit des Serverzertifikats (Ablauf) 17 5.Fazit Ohne Verschlüsselung sind Web-Daten für jeder der Zugang zum entsprechenden Netz hat, als klar Text lesbar. HTTPS schützt Daten, die zwischen dem Client und dem Server fließen. Der Benutzer baut die Verbindung über Port 443 und mit Hilfe Authentisierens Zertifikate wird Echtheit geprüft, ob der Client richtigen Zertifikat enthält, dann mit dem auf beiden vorhandenen Sitzungsschlüssel kann eine symmetrische Datenverschlüsselung beginnen. Der Zertifikataussteller kann für jedes Zertifikat eine Gültigkeitsdauer festlegen, die durch einen Anfangszeitpunk und ein Endzeitpunk definiert wird. Mann muss immer aufachten, die Zertifikaten nicht abgelaufen. Beim Client Zertifikaten können auch Probleme tauchen, wenn Benutzer sein Passwort vergisst oder installiert ein update der Browser. Leider sind die HTTPS- Implementierungen nicht sicher. Der automatischen Bestätigung der Zertifikate besteht darin, dass der Anwender eine HTTPS-Verbindung nicht mehr bewusst wahrnimmt. Dies wurde bei Phishing-Angriffen ausgenutzt, die können beim Online-Banking Anwendungen gebenutz werden. Deshalb muss man beim E-Mail links immer aufachten. 6.Literatur http://www.apachefriends.org/de/xampp.html http://www.openssl.org/docs/HOWTO/certificates.txt http://buecher.lingoworld.de/apache2/dirs.php?o=mod http://mathias-kettner.de/lw_ca_zertifikat_erstellen.html http://fra.nksteidl.de/Erinnerungen/OpenSSL.php http://www.openssl.org/docs/apps/x509.html Sicherheitsrisiko Web-Anwendung ISBN 3-89864-259-3 18