Eigener SchlĂŒsseldienst
Nachdem der vorige Artikel das notwendige Grundwissen zu eigenen Virtual Private Networks vermittelt hat, geht es nun daran, die eigene Zertifikatsverwaltung einzurichten, das Gateway zu installieren und die Clients richtig zu konfigurieren.
Als Basis fĂŒr die eigene Certification Authority (CA) dient in diesem praktischen Beispiel das Open-Source-Projekt OpenSSL, das auch Bestandteil der meisten Linux-Distributionen ist. Bevor man damit jedoch Zertifikate erstellt, muss die Konfigurationsdatei openssl.cnf an das jeweilige Umfeld angepasst werden. Dazu gehören die Verzeichnisse, in denen OpenSSL seine Dateien abspeichert, da diese stark von der jeweiligen Distribution abhĂ€ngen. Passende Voreinstellungen fĂŒr die einzelnen Elemente des Distinguished Name erleichtern die Arbeit. Des Weiteren kann man die GĂŒltigkeitsdauer von Endzertifikaten und Certificate Revocation Lists (CRLs) modifizieren.
Da OpenSSL ĂŒber die Kommandozeile zu bedienen ist und selbst elementare Aktionen wie das Erstellen eines neuen User-Zertifikats mehrere Schritte mit einer Vielzahl kryptischer Optionen erfordern, stellen wir ĂŒber den Soft-Link einige Skripte bereit, die diese VorgĂ€nge soweit wie möglich automatisieren. Zum VerstĂ€ndnis der Arbeitsweise erklĂ€ren die folgenden AbsĂ€tze einige dieser Schritte en dĂ©tail. Die folgenden Befehle beziehungsweise die Skripte sind im Default-Verzeichnis von OpenSSL aufzurufen (oft /usr/ssl/).
Zertifikate
Als erstes benötigt man einen 2048 Bit langen RSA Private Key fĂŒr die Certification Authority:
openssl genrsa -des3 -out private/cakey.pem 2048
Dieser SchlĂŒssel sollte aus SicherheitsgrĂŒnden unbedingt mit der Option â-des3â unter Eingabe einer âPassphraseâ verschlĂŒsselt werden, damit kein Unbefugter eigene User-Zertifikate signieren kann. Der zweite Schritt generiert das selbst unterzeichnete Root CA-Zertifikat, cacert.pem, mit einer GĂŒltigkeitsdauer von vier Jahren:
openssl req -new -x509 -days 1460 -key private/cakey.pem -out cacert.pem
Dieser Befehl fragt die vorher festgelegte Passphrase des Private Key und die einzelnen Elemente des Common Name ab.
openssl x509 -in cacert.pem -noout -text
zeigt das Zertifikat in lesbarer Form an, sodass man die Eingaben nochmals ĂŒberprĂŒfen kann.
Das Erstellen eines neuen Zertifikats fĂŒr VPN-Endpunkte - also fĂŒr das Gateway und die Roadwarrior - erfolgt in drei Schritten. Der Befehl
openssl genrsa -des3 -out private/gatewayKey.pem 1024
generiert einen RSA-SchlĂŒssel mit 1024 Bit. Falls dieser mit â-des3â geschĂŒtzt wird, muss man die speziell fĂŒr den Gateway-Key gewĂ€hlte Passphrase spĂ€ter in der FreeS/WAN-Konfiguration in /etc/ipsec.secrets zusĂ€tzlich zum Dateinamen gatewayKey.pem angeben, damit FreeS/WAN auf den SchlĂŒssel zugreifen kann.
openssl req -new -key private/gatewayKey.pem -out gatewayReq.pem
erstellt den Antrag auf ein Zertifikat (Certificate Request), der mit
openssl ca -notext -in gatewayReq.pem -out gatewayCert.pem
durch die CA unterschrieben wird. Dazu ist wiederum die Passphrase fĂŒr den SchlĂŒssel der CA einzugeben.
Aus historischen GrĂŒnden muss das Zertifikat des Linux-Gateways unter dem Dateinamen /etc/x509cert.der in binĂ€rer Form vorliegen. Der Befehl
openssl x509 -in gatewayCert.pem -outform der -out /etc/x509cert.der
bewerkstelligt die notwendige Konvertierung.
Certificate Revocation List
Wer nicht jede Verbindung einzeln konfigurieren möchte, sondern ĂŒber den Parameter â%anyâ alle Roadwarrior mit Zertifikaten der VPN-CA akzeptiert, muss ĂŒber eine Certificate Revocation List (CRL) dafĂŒr sorgen, dass das Gateway kompromitierte Zertifikate nicht mehr annimmt. Dazu erstellt die herausgebende CA periodisch eine gĂŒltige CRL, die ihre Unterschrift trĂ€gt:
openssl ca -gencrl -out crls/crl.pem
AbhĂ€ngig davon, wie schnell ein VPN-Gateway beziehungsweise die Clients auf eine Sperrung eines Zertifikats reagieren sollen, kann man die GĂŒltigkeitsdauer dieser CRL in der Datei openssl.conf von 30 Tagen auf wenige Tage oder im Extremfall sogar nur wenige Stunden festlegen. Mit den Parametern â-crldaysâ respektive â-crlhoursâ kann dies auch direkt auf der Kommandozeile geschehen.
openssl ca -revoke bodoCert.pem
markiert Bodos Zertifikat in der Datei index.txt als gesperrt, was beim nĂ€chsten Aktualisieren der CRL in die Datei crl.pem ĂŒbertragen wird. Der Kontrollaufruf
openssl crl -in crls/crl.pem -noout -text
zeigt die Serienummern der gesperrten Zertifikate an. Vor allem wenn CRLs auf einem Server öffentlich zugÀnglich gemacht werden, empfiehlt es sich, die CRL vorher vom PEM- in das binÀre DER-Format zu wandeln. Der Befehl
openssl crl -in crls/crl.pem -outform der -out crls/cert.crl
erledigt dies.
FreeS/WAN installieren
Die Installation von FreeS/WAN selbst ist in der Online-Dokumentation ausfĂŒhrlich beschrieben. Um mit Zertifikaten arbeiten zu können, muss man zusĂ€tzlich noch den X.509-Patch [6] einspielen, der an der ZĂŒrcher Hochschule Winterthur entwickelt wurde. Die folgende Anleitung bezieht sich auf die Version 0.9.8 des X.509-Patch, die zur FreeS/WAN-Version 1.95 passt und den Umgang mit den Zertifikaten im Vergleich zu frĂŒheren Versionen deutlich vereinfacht.
Der Download enthĂ€lt neben der Installations- und Konfigurationsanleitung den eigentlichen Patch âfreeswan.diffâ, der im FreeS/WAN Quellverzeichnis wie folgt anzuwenden ist:
patch -p1 < freeswan.diff
Danach kann man FreeS/WAN entsprechend der Dokumentation in âINSTALLâ ĂŒbersetzen und installieren. LĂ€uft bereits ein Kernel mit IPSec-UnterstĂŒtzung, genĂŒgt es, mit
make programs make install
die IPSec-Programme zu aktualisieren.
Danach sind die notwendigen Zertifikate und SchlĂŒssel an die richtigen Stellen zu kopieren. Das CA-Root-Zertifikat, welches die Host- und User-Zertifikate beglaubigt, gehört in das Verzeichnis /etc/ipsec.d/cacerts/, eine optionale Certificate Revocation List (CRL) mit der Liste der gesperrten Serienummern in /etc/ipsec.d/crls/ und das eigene Host-Zertifikat des VPN-Gateways muss unter dem Dateinamen /etc/x509cert.der abgespeichert werden. Der dazugehörige Private Key muss in /etc/ipsec.d/private/ liegen, auf das nur root Zugriffsrechte besitzen darf. Die ebenfalls zugriffsgeschĂŒtzte Datei /etc/ipsec.secrets muss mit der Zeile
: RSA gatewayKey.pem "Geheime Passphrase"
den Dateinamen des Private Key sowie gegebenenfalls die Passphrase enthalten.
Die Definition der Roadwarrior-Verbindungen erfolgt in der Konfigurationsdatei /etc/ipsec.conf. FreeS/WAN verwendet fĂŒr die beiden Enden einer VPN-Verbindung die Bezeichnungen âleftâ und ârightâ. Meist bezeichnet âleftâ das VPN-Gateway und ârightâ den Roadwarrior, aber FreeS/WAN akzeptiert auch vertauschte Rollen. Die folgenden ErlĂ€uterungen beschrĂ€nken sich auf die Parameter, die fĂŒr das Aufsetzen von VPN-Verbindungen mit X.509-Zertifikaten relevant sind. Einen vollstĂ€ndigen Ăberblick ĂŒber alle Optionen gibt die FreeS/WAN-Dokumentation.
Die Konfigurationsdatei ipsec.conf besteht aus einem allgemeinen âsetupâ-Abschnitt und einer unbeschrĂ€nkten Anzahl von âconnâ-Abschnitten, welche einzelne VPN-Verbindungen definieren. Der Abschnitt âconn %defaultâ enthĂ€lt Defaultwerte, die fĂŒr alle Verbindungen gelten.
Die unten abgedruckte Beispielkonfiguration legt durch die Parameter ârsasigâ und â%certâ fest, dass die Authentifizierung mit RSA-Signaturen und Zertifikaten erfolgen soll. âleft=%defaultrouteâ ĂŒbernimmt automatisch die (externe) IP-Adresse des VPN-Gateways wĂ€hrend âleftsunet=10.1.0.0/16â das Firmennetz angibt, das sich hinter dem VPN-Gateway befindet. Und schlieĂlich spezifiziert âleftidâ den X.500 Distinguished Name des VPN-Gateways.
Die erste eigentliche Verbindungsdefinition akzeptiert jeden Roadwarrior, der ein Zertifikat von einer akzeptierten CA vorweist. FreeS/WAN âvertrautâ jeder CA, deren Root-CA-Zertifikat sich in /etc/ipsec.d/cacerts befindet. Damit ermöglicht eine einzige Roadwarrior-Definition eine unbegrenzte Anzahl von VPN-Verbindungen.
Bei wenigen VPN-Verbindungen oder wenn man ZugriffsbeschrĂ€nkungen nicht ĂŒber CRLs realisieren möchte, kann man auch jede Roadwarrior-Verbindung durch zusĂ€tzliche Angabe des Distinguished Name explizit auffĂŒhren. Dadurch weist das VPN-Gateway alle Benutzer ab, die zwar ein Zertifikat der Kool CA besitzen, aber nicht in ipsec.conf eingetragen sind.
IPSec unter Windows
Windows 2000 und XP enthalten bereits eine eigene IPSec-Implementierung; fĂŒr andere Versionen muss man einen IPSec-Client wie SSH Sentinel, SafeNet/SoftRemote oder PGPnet installieren.
Sentinel enthĂ€lt ein eigenes Key-Management, bei dem der Client Private Keys selbst erzeugt, die diesen nie verlassen. Derzeit ist es nicht möglich, extern erstellte SchlĂŒssel zu importieren (erst Version 1.3 soll auch den Import ĂŒber Dateien im PKCS#12-Format unterstĂŒtzen). Bei der Installation generiert das Programm automatisch einen Private Key und speichert diesen zusammen mit einem selbst unterschriebenen Host-Zertifikat ab. Dieses Zertifikat akzeptiert das VPN-Gateway jedoch mangels Beglaubigung durch die Kool CA nicht.
Deshalb muss man zunĂ€chst mit Sentinel einen Certificate Request erstellen. Dies geschieht im âKey Managementâ des SSH Policy Editor. Ăber einen Klick der rechte Maustaste auf âAuthentication Keys / primary host keyâ öffnet âAdd New Authentication Keyâ ein Popup-MenĂŒ, in dem âEnroll for a new certificateâ auszuwĂ€hlen ist. Als Kennung dient die âAdministrator E-Mailâ; die erweiterten Optionen enthalten Eingabefelder fĂŒr die anderen Elemente des gewĂŒnschten Distinguished Name (Land, Organisation et cetera).
Das âFile Based Enrollmentâ erlaubt es, den Antrag in der Datei âantje.reqâ abzuspeichern, damit ihn die OpenSSL-CA der Kool AG bearbeiten kann. Der Befehl
openssl ca -notext -in antje.req -out antjeCert.pem
erstellt dort das unterschriebene User-Zertifikat, das man im SSH Policy Editor mit dem MenĂŒ âAuthentication Keys/primary host key/Import New Authentication Keyâ in Sentinel importiert. Das bereits vorhandene, selbstunterschriebene Zertifikat darf man trotzdem nicht löschen, da dies den Private Key mit ins Jenseits befördern wĂŒrde. Um aber unmissverstĂ€ndlich klarzustellen, dass Sentinel das Zertifikat der Kool CA verwenden soll, erklĂ€rt man es im Auswahldialog der rechten Maustaste zur âDefault IPSec Responseâ.
Damit Sentinel der FreeS/WAN-Gegenstelle das gebĂŒhrende Vertrauen entgegenbringt, muss das Root-CA-Zertifikat âcacert.pemâ unter âTrusted Root CAsâ geladen werden. Ein anschlieĂender Klick auf âApplyâ etabliert die Vertrauensstellung.
Nun gilt es, die VPN-Verbindung im HauptmenĂŒ der âSecurity Policyâ aufzusetzen. Dazu genĂŒgt es, mit âAddâ unter VPN Connections den Hostnamen des Gateways, das Zertifikat und die Netzwerk-Parameter des Firmennetzes einzutragen. Es ist wichtig, die Option âLegacy Proposalâ anzukreuzen, die unter anderem dafĂŒr sorgt, dass zur VerschlĂŒsselung 3DES ausgehandelt wird.
Via âDiagnosticsâ versucht Sentinel probehalber eine Verbindung aufzubauen. Auch wenn das im ersten Anlauf nicht klappt, sollte man nicht vergessen, die Verbindung mit âApplyâ fest einzurichten. Bei einem Ping auf einen der Firmenrechner sollte jetzt Sentinel die VPN-Verbindung selbststĂ€ndig öffnen.
Windows 2000 und XP
Die meisten anderen IPSec-Clients und auch Windows selbst können selbst erstellte SchlĂŒssel und Zertifikate im PKCS#12-Format mit der Dateiendung â.p12â in die SchlĂŒsselverwaltung importieren. Dazu packt die ausstellende CA das Zertifikat, den Private Key, sowie das Root-CA-Zertifikat und eventuelle Intermediate-CA-Zertifikate mit
openssl pkcs12 -export -in bodoCert.pem -inkey private/bodoKey.pem -certfile cacert.pem -out bodo.p12
in die Datei bodo.p12. Der Import in die Zertifikatsverwaltung von Windows darf jedoch nicht ĂŒber einen Doppelklick auf die Datei geschehen, da sonst der Wizard das Zertifikat unter dem Benutzerkonto abspeichert, wo es die IPSec-Erweiterungen nicht finden. Die Management-Konsole (Start-MenĂŒ/AusfĂŒhren und âmmcâ starten) stellt die notwendigen Importfunktionen bereit. Ăber âDatei/Snap-In hinzufĂŒgenâ aktiviert man das Plug-in fĂŒr âZertifikateâ und wĂ€hlt dabei explizit das âComputerkontoâ. Ăber âAktion/Alle Tasksâ kann man die Datei dann schlieĂlich importieren. Dabei stellt die Option âZertifikatspeicher automatisch auswĂ€hlenâ sicher, dass die enthaltenen Zertifikate alle an der richtigen Stelle landen.
Theoretisch kann man unter Windows 2000/XP die notwendigen Filter und Regeln fĂŒr eine IPSec-Verbindung ebenfalls in der Management-Konsole selbst erstellen. Doch dieser Vorgang ist Ă€uĂerst umstĂ€ndlich und vor allem fehlertrĂ€chtig, sodass es sich empfiehlt, dies dem kostenlosen IPSec-Tool von Marcus MĂŒller zu ĂŒberlassen. Es benutzt die Programme ipsecpol.exe (W2K) beziehungsweise ipseccmd.exe (XP), die Microsoft zur VerfĂŒgung stellt, um die notwendigen Regeln anhand einer einfachen Konfigurationsdatei zu erstellen.
In der Datei âipsec.confâ, deren Format an die gleichnamige FreeS/WAN-Datei angelehnt ist, trĂ€gt man die IP-Adresse des FreeS/WAN-Gateways und die des Firmennetzes ein. ârightcaâ spezifiziert den Distinguished Name der austellenden CA (Windows sucht sich das passende Zertifikat dann selbst) und ânetworkâ legt fest, ob die Ăbertragungen ĂŒber die Dial-up-Verbindung (ârasâ), ein Netzwerk-Interface (âlanâ) oder beide (âbothâ) gesichert werden sollen. Der Aufruf von ipsec.exe erstellt die Regeln, sodass ein anschlieĂendes âping 10.1.0.1â mit dem FreeS/WAN-Gateway eine gesicherte Verbindung aushandeln sollte. Mit dem Parameter â-deleteâ aufgerufen, löscht ipsec.exe die Regeln wieder.
Nach dem erfolgreichen Ping sollten interne Webseiten und alle anderen LAN-Ressourcen zugĂ€nglich sein - der Roadwarrior kann zukĂŒnftig ĂŒbers Internet ânach Hause telefonierenâ. (ju [1])
Dieser Auszug aus einer FreeS/WAN-Konfigurationsdatei (/etc/ipsec.conf) ermöglicht dem Roadwarrior den Zugang zum Firmennetz.
conn %default authby=rsasig leftrsasigkey=%cert
Aus dieser Konfigurationsdatei erstellt das ipsec-Tool die fĂŒr XP oder Windows 2000 nötige Regeln fĂŒr eine gesicherte Verbindung ins Netz der Kool AG.
conn Bodo left=%any right=193.X.Y.Z rightsubnet=10.1.0.0/255.255.0
Kleines Einmaleins der X.509-Zertifikate
Der Aufbau eines X.509-Zertifikats ist in der Ă€uĂerst flexiblen, aber auch sehr komplexen âAbstract Syntax Notation Oneâ (ASN.1) definiert. Die Kodierung erfolgt binĂ€r unter Anwendung der Distinguished Encoding Rules (DER). Die ASN.1-Notation und die dazugehörige DER-Kodierung sind in den ITU-T-Empfehlungen X.680 respektive X.690 niedergeschrieben, der Zertifikatsaufbau im X.509-Standard.
Um Zertifikate zum Beispiel per E-Mail zu versenden, werden sie hÀufig vom binÀren DER-Format in das gleichwertige Base64-kodierte PEM-Format gewandelt. Der Base64-Zeichensatz, der auch bei MIME-AnhÀngen zur Anwendung kommt, besteht aus 64 druckbaren ASCII-Zeichen und vergrössert durch die Abbildung von drei 8-Bit- auf vier 6-Bit-Zeichen die Zertifikatsdatei um etwa ein Drittel.
Das Bild unten zeigt den prinzipiellen Aufbau eines X.509-Zertifikats. An erster Stelle steht die Versionsnummer. IPSec verwendet Zertifikate der Version 3 (X.509v3). An zweiter Stelle folgt eine eindeutige Serienummer, deren Aufbau die CA festlegt. Das nĂ€chste Feld gibt Auskunft darĂŒber, mit welchem Algorithmus das Zertifikat digital unterschrieben ist. Das Signaturverfahren beruht meist auf einem ĂŒber das Zertifikat gebildeten MD5- oder SHA-1-Hashwert, der mit dem privaten RSA-SchlĂŒssel des Herausgebers verschlĂŒsselt wird.
Das Issuer-Feld enthĂ€lt den Distinguished Name der herausgebenden CA. Im Beispiel der Kool CA lautet er âC=DE, O=Kool AG, CN=Kool CAâ. Das Validity-Feld legt die GĂŒltigkeitsdauer fest. Sie betrĂ€gt fĂŒr User- und Host-Zertifikate hĂ€ufig 365 Tage. Es ist jedoch sinnvoll, selbst erzeugten CA-Zertifikaten eine GĂŒltigkeit von drei bis vier Jahren zu geben. Nun folgt schlieĂlich mit dem Subject-Eintrag die IdentitĂ€t des Zertifikatsinhabers ebenfalls in Form eines Distinguished Name. Im Beispiel von Antjes Zertifikat lautet dieser âC=DE, O=Kool AG, CN=antje@kool.netâ. In einem selbst signierten Root-CA-Zertifikat stimmen Subject- und Issuer-Feld ĂŒberein.
Der eigentliche Zweck eines Zertifikats ist die beglaubigte VerknĂŒpfung einer IdentitĂ€t mit einem Public Key, der an nĂ€chster Stelle folgt. Endzertifikate fĂŒr IPSec-Anwendungen beinhalten normalerweise einen RSA-SchlĂŒssel mit 1024 Bit, wĂ€hrend CA-Zertifikate wegen der lĂ€ngeren Lebensdauer meist mit 2048-Bit-SchlĂŒsseln ausgestattet werden.
AnschlieĂend an den Public Key können einige optionale Felder folgen, von denen nur die v3-Extensions eine Bedeutung fĂŒr IPSec haben. Mit der Extension âsubjectAltNameâ kann die E-Mail-Adresse eines Users (Beispiel: antje@kool.net) oder ein Rechnername eines Hosts (Beispiel: gateway.kool.net) angegeben werden, der dann anstelle des vollstĂ€ndigen Distinguished Name als ID dienen kann.
HĂ€ufig wird in der Extension âcrlDistributionPointsâ, ein Uniform Resource Identifier (URI) auf einen HTTP- oder LDAP-Server unterbracht (zum Beispiel www.kool.net/ca/cert.crl), ĂŒber den der VPN-Client eine aktuelle CRL des Zertifikatherausgebers beziehen kann. Es existieren noch viele weitere v3 Extensions, wobei aber hĂ€ufig die genaue Interpretation und Verwendung umstritten ist.
Ăber den Kern des Zertifikats wird der MD5- oder SHA-1-Hashwert gebildet und die CA verschlĂŒsselt diesen mit ihrem Private Key und hĂ€ngt ihn unter nochmaliger Angabe des verwendeten Signaturverfahrens an den Kernteil an.
X.509 beim SchlĂŒsselaustausch
Authentifizierung und SchlĂŒsselaustausch erfolgen bei IPSec ĂŒber ein eigenstĂ€ndiges Protokoll fĂŒr den Internet Key Exchange (IKE), in das sich die X.509-Zertifikate nahtlos einfĂŒgen. Wenn Antje oder Bodo eine VPN-Verbindung von auĂen aufbauen, senden sie eine IKE-Meldung an den UDP-Port 500 des VPN-Gateways der Firma Kool AG. Dieser Port muss also durch die Firewall immer freigeschaltet sein, damit ein Verbindungsaufbau von beliebigen IP-Adressen aus möglich ist.
In einem ersten IKE-Meldungsaustausch (Meldungen 1 und 2 ) einigen sich Roadwarrior und VPN-Gateway auf IKE-Verbindungsparameter wie den verwendeten symmetrischen VerschlĂŒsselungsalgorithmus sowie die Authentifizierungsmethode. In einem zweiten Schritt (Meldungen 3 und 4) wird mit Hilfe des Diffie-Hellman-Verfahrens (DH) ein gemeinsamer symmetrischer SchlĂŒssel generiert, damit der dritte IKE-Austausch (Meldungen 5 und 6), welcher der Identifizierung und Authentifizierung der beiden Verbindungspartner dient, verschlĂŒsselt und damit unter Ausschluss der Ăffentlichkeit erfolgen kann.
Zur Authentifizierung sendet Antjes VPN-Client eine digitale Signatur (Sig). Diese wird als MD5- oder SHA-1-Hashwert ĂŒber alle bisher ausgetauschten Meldungen, das Diffie-Hellman-Geheimnis und die Zufallszahlen Ri und Rr gebildet. Dieser Wert wird anschlieĂend mit Antjes Private Key verschlĂŒsselt. Das VPN-Gateway kann nach Erhalt der IKE-Meldung 5 mit Hilfe von Antjes Public Key die GĂŒltigkeit dieser Unterschrift mit dem ebenfalls ĂŒbertragenen Zertifikat (Cert) ĂŒberprĂŒfen. Die Echtheit des Public Key beweist die digitale Unterschrift der vertrauenswĂŒrdigen Root CA, ĂŒber deren Public Key beide Kommunikationspartner verfĂŒgen. Wichtig ist dabei, dass die ID der IKE-Nachricht mit dem im Zertifikat aufgefĂŒhrten Distinguished Name ĂŒbereinstimmt. (ju [2])
URL dieses Artikels:
https://www.heise.de/-288142
Links in diesem Artikel:
[1] mailto:ju@ct.heise.de
[2] mailto:ju@heise.de
Copyright © 2002 Heise Medien