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.

7.3 Sicherer Umgang <strong>mit</strong> X.509-Zertifikaten 381<br />

SubjectAltName ::= GeneralNames<br />

GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName<br />

GeneralName ::= CHOICE {<br />

otherName<br />

[0] OtherName,<br />

rfc822Name<br />

[1] IA5String,<br />

dNSName<br />

[2] IA5String,<br />

x400Address<br />

[3] ORAddress,<br />

directoryName<br />

[4] Name,<br />

ediPartyName<br />

[5] EDIPartyName,<br />

uniformResourceIdentifier [6] IA5String,<br />

iPAddress<br />

[7] OCTET STRING,<br />

registeredID<br />

[8] OBJECT IDENTIFIER<br />

}<br />

Abb. 7.3. Aufbau eines X.509-SubjectAltNames<br />

• Sofern ein X.509-Zertifikat die Zertifikatserweiterung Subject Alternative<br />

Name enthält <strong>und</strong> in der zugehörigen Folge von General Names ein<br />

dNSName-Element vorkommt, dann muß einer der DNS-Namen aus der<br />

Zertifikatserweiterung zur Identitätsprüfung herangezogen werden.<br />

• In allen anderen Fällen (d. h. entweder es existiert keine passende Zertifikatserweiterung<br />

oder diese enthält keinen DNS-Namen) muß zur Identitätsprüfung<br />

das Feld Common Name (CN) aus der Subject-Komponente<br />

des Zertifikats herangezogen werden.<br />

Mit Hilfe der passenden Funktionen aus der Open<strong>SSL</strong>-API läßt sich anhand<br />

dieser Vorgaben auch der letzte Schritt der Identitätsprüfung umsetzen.<br />

Als allererstes muß das Programm für seine Untersuchungen Zugriff auf das<br />

vom Kommunikationspartner präsentierte Zertifikat erhalten. Die Funktion<br />

<strong>SSL</strong>_get_peer_certificate() liefert zu einer aufgebauten <strong>SSL</strong>-Verbindung<br />

eine Referenz auf das Zertifikat des Gegenübers. Sollte der Kommunikationspartner<br />

kein Zertifikat vorgewiesen haben oder besteht noch keine Verbindung,<br />

so gibt die Funktion einen Nullzeiger zurück. Sobald die Untersuchungen<br />

am Zertifikat abgeschlossen sind, sollte der zugeordnete Speicher <strong>mit</strong>tels<br />

X509_free() natürlich wieder freigegeben werden.<br />

#include<br />

#include<br />

<br />

<br />

X509 *<strong>SSL</strong>_get_peer_certificate( <strong>SSL</strong> *ssl );<br />

void X509_free( X509 *cert );<br />

void *X509_get_ext_d2i( X509 *cert, int nid, int *crit,<br />

int *idx );

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!