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.

370 7 Client-/Server-Programmierung <strong>mit</strong> Open<strong>SSL</strong><br />

Ist das <strong>SSL</strong>_VERIFY_PEER-Flag serverseitig gesetzt, so bittet der <strong>SSL</strong>-<br />

Server während des Verbindungsaufbaus auch den <strong>SSL</strong>-Client um dessen<br />

Client-Zertifikat. Falls der Client ein Zertifikat über<strong>mit</strong>telt, wird das<br />

Zertifikat vom Server geprüft <strong>und</strong> das <strong>SSL</strong>-Handshake nur dann fortgesetzt,<br />

wenn das Zertifikat gültig <strong>und</strong> von einer vertrauenswürdigen Zertifizierungsstelle<br />

ausgestellt ist. Schickt der Client kein Zertifikat, wird das<br />

<strong>SSL</strong>-Handshake dennoch fortgesetzt.<br />

<strong>SSL</strong> VERIFY FAIL IF NO PEER CERT: In Ergänzung zum eben beschriebenen<br />

<strong>SSL</strong>_VERIFY_PEER-Flag kann ein <strong>SSL</strong>-Server durch zusätzliche Angabe<br />

der Option <strong>SSL</strong>_VERIFY_FAIL_IF_NO_PEER_CERT darauf bestehen, daß der<br />

<strong>SSL</strong>-Client ein Zertifikat liefern muß. Andernfalls wird das <strong>SSL</strong>-Handshake<br />

umgehend abgebrochen. Ist <strong>SSL</strong>_VERIFY_PEER nicht gesetzt oder soll das<br />

Flag für eine clientseitige <strong>SSL</strong>-Verbindung gesetzt werden, so wird das<br />

<strong>SSL</strong>_VERIFY_FAIL_IF_NO_PEER_CERT-Flag ignoriert.<br />

<strong>SSL</strong> VERIFY CLIENT ONCE: Zusätzlich zur <strong>SSL</strong>_VERIFY_PEER-Option kann für<br />

einen <strong>SSL</strong>-Server außerdem noch die <strong>SSL</strong>_VERIFY_CLIENT_ONCE-Option<br />

aktiviert werden. Das Setzen dieses Flags bewirkt, daß, sofern eine bestehende<br />

<strong>SSL</strong>-Verbindung entsprechend ihrer Verbindungsparameter neu<br />

ausgehandelt werden muß, nicht erneut das bereits erfolgreich verifizierte<br />

Client-Zertifikat angefordert wird. Ist <strong>SSL</strong>_VERIFY_PEER nicht gesetzt<br />

oder soll das Flag für eine clientseitige <strong>SSL</strong>-Verbindung gesetzt werden,<br />

so wird das <strong>SSL</strong>_VERIFY_CLIENT_ONCE-Flag wiederum ignoriert.<br />

Über den dritten Parameter der beiden Funktionen <strong>SSL</strong>_CTX_set_verify()<br />

<strong>und</strong> <strong>SSL</strong>_set_verify() kann eine Callback-Funktion für die Nachbereitung<br />

der Zertifikatsprüfung hinterlegt werden. Die Callback-Funktion wird im Allgemeinen<br />

dazu genutzt, die Ursache einer fehlgeschlagenen Zertifikatsprüfung<br />

zu protokollieren. Über diese Funktion kann sogar das Ergebnis der Open<strong>SSL</strong>internen<br />

Prüfung korrigiert werden, was aber nur in gut begründeten Ausnahmefällen<br />

erfolgen sollte. Allzuleicht ließe sich da<strong>mit</strong> nämlich versehentlich die<br />

Sicherheit der aufzubauenden <strong>SSL</strong>-Verbindung kompro<strong>mit</strong>tieren.<br />

Der Callback-Funktion wird beim Aufruf im ersten Parameter der Status der<br />

von Open<strong>SSL</strong> durchgeführten Zertifikatsprüfung übergeben. Im zweiten Argument<br />

sind Zusatzinformationen zum geprüften Zertifikat sowie zu einer eventuellen<br />

Fehlerursache hinterlegt. Der Rückgabewert der Callback-Funktion wird<br />

dann als Ergebnis der gesamten Zertifikatsprüfung verstanden, weshalb im<br />

Normalfall der Status der Open<strong>SSL</strong>-internen Prüfung unverändert weitergegeben<br />

wird.<br />

Da<strong>mit</strong> von Open<strong>SSL</strong> die Herkunft eines Zertifikats geprüft werden kann, muß<br />

den Testroutinen eine Liste der vertrauenswürdigen Zertifizierungsstellen vorliegen.<br />

In vielen Installationen existieren dazu systemweite Zertifikatsspeicher,<br />

in denen die CA-Zertifikate, also die öffentlichen Schlüssel derartiger Zertifi-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!