05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

318 6 Netzwerkprogrammierung <strong>mit</strong> <strong>SSL</strong><br />

<strong>SSL</strong> auf einem separaten Port<br />

Die ersten <strong>SSL</strong>-fähigen Netzwerkdienste haben für die sichere Datenübertragung<br />

einen separaten Port gewählt. Das bekannteste Beispiel ist sicher<br />

das in RFC 2818 beschriebene HTTP Over TLS (HTTPS), das auf einem<br />

dafür reservierten Port (vorgesehen ist Port 443) <strong>SSL</strong>-verschlüsselte HTTP-<br />

Verbindungen entgegennimmt <strong>und</strong> im Webbrowser an den <strong>mit</strong> https:// zu<br />

erkennen ist. <strong>SSL</strong>-fähige Webserver nehmen also gleichzeitig auf zwei verschiedenen<br />

Ports Anfragen entgegen, sie hören zum einen auf Port 80 auf ungesicherte<br />

Netzwerkverbindungen <strong>und</strong> warten zum anderen auf Port 443 auf das<br />

Eintreffen neuer <strong>SSL</strong>-Verbindungen.<br />

Die beschriebene Vorgehensweise wird auch zur Absicherung einer ganzen<br />

Reihe anderer Anwendungsprotokolle eingesetzt, etwa bei POP3S (das Post<br />

Office Protocol über <strong>SSL</strong>) oder SSMTP (das Simple Mail Transfer Protocol<br />

über <strong>SSL</strong>). Für alle Anwendungsprotokolle, die auf diese Weise durch<br />

<strong>SSL</strong> geschützt werden, gilt, daß bei diesem Verfahren lediglich eine unverschlüsselte<br />

Netzwerkverbindung durch eine verschlüsselte Verbindung ersetzt<br />

wird <strong>und</strong> daß das Anwendungsprotokoll davon unberührt bleibt. Server <strong>und</strong><br />

Client müssen also im Rahmen ihrer Kommunikation immer noch die selbe<br />

Sprache sprechen <strong>und</strong> die gleichen Nachrichten austauschen.<br />

Abgesehen von einem etwas verschwenderischen Umgang <strong>mit</strong> den verfügbaren<br />

Ports funktioniert dieser Weg für einfache Netzwerkdienste ausgezeichnet.<br />

Komplexere Server sind jedoch dazu in der Lage, sogenannte virtuelle Hosts<br />

zu bilden <strong>und</strong> diese dann verschiedenen DNS-Namen zuzuordnen. Ein solcher<br />

Server bietet seine Dienste also gleichzeitig für mehrere DNS-Namen an, was<br />

für die Nutzer der Dienste so aussieht, als würden diese von jeweils einem<br />

eigenen, dedizierten Server bereitgestellt. Dabei können zwei unterschiedliche<br />

DNS-Namen durchaus auf dieselbe IP-Adresse verweisen. Da<strong>mit</strong> der Server<br />

nun auch in diesem Spezialfall weiß, als welcher der vielen virtuellen Hosts er<br />

gerade eine Anfrage erhält, bettet der Client den gewünschten DNS-Namen in<br />

seine Anfrage <strong>mit</strong> ein. Ohne diese Zusatzinformation wäre der Server machtlos,<br />

denn er hört ja für alle virtuellen Hosts an der selben Socket-Adresse, d. h.<br />

an der selben Kombination aus IP-Adresse <strong>und</strong> Port. Was für unverschlüsselte<br />

Netzwerkverbindungen prima funktioniert, stößt <strong>mit</strong> <strong>SSL</strong> aber plötzlich auf<br />

ein echtes Problem: Der Server muß bereits beim Aufbau der <strong>SSL</strong>-Verbindung<br />

ein zum DNS-Namen passendes Zertifikat vorweisen. Nachdem er allerdings<br />

erst im Laufe der Anfrage erfährt, an welchen virtuellen Host die Anfrage<br />

tatsächlich gerichtet ist, ist er dummerweise genau dazu nicht in der Lage. 13<br />

13 Unter den in RFC 3546 [BWNH + 03] vereinbarten TLS-Erweiterungen findet sich<br />

auch eine Erweiterung, die dieses DNS-Namen-Problem für <strong>SSL</strong>-basierte Server<br />

<strong>mit</strong> virtuellen Hosts löst.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!