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