Bäumchen wechsle dich

Werbung
Verzeichnisdienste
PRAXIS
avr.penrose_id17058_
Penrose: Unterschiedliche
Datenquellen via LDAP
Bäumchen
wechsle dich
Thorsten Scherf
In heutigen IT-Landschaften gestaltet sich
die Verwaltung der stark zunehmenden
Benutzerinformationen immer schwieriger –
nicht zuletzt, weil viele unterschiedliche
Backend-Systeme zum Einsatz kommen.
Das freie Identity-Management-System
Penrose-Server hilft, den Überblick nicht zu
verlieren, und stellt einen einheitlichen Blick
auf vorhandene Benutzerinformationen sicher.
E
in gängiges Szenario aus der Praxis: Zwei Unternehmen fusionieren. Firma A setzt zwei unterschiedliche Identity-Systeme ein. So
befinden sich die Daten der Mitarbeiter
in einem LDAPv3-konformen Directory-Server, die Kundeninformationen
hingegen in einer SQL-Datenbank. Firma B setzt ausschließlich Active Directory (AD) ein. Die CRM-Applikation
aus Firma B ist nicht in der Lage, auf
Daten aus einer SQL-Datenbank zuzugreifen, Anwendungen aus Firma A
wiederum erwarten ein LDAPv3-konformes Schema und können nichts mit
dem proprietären Schema eines ADServers anfangen.
Einen potenziellen Ausweg bietet
der Einsatz eines Meta-Directory wie
Novells DirXML, das alle vorhandenen
Identitäten aufnimmt und verwaltet. Der
entscheidende Nachteil dieses Ansatzes
besteht im nicht zu unterschätzenden
Synchronisierungsaufwand zwischen
den Systemen. Weitere Schwierigkeiten
birgt gegebenenfalls die Berechtigungstruktur der synchronisierten Datenlandschaft. Dieser Artikel beschreibt
einen anderen Lösungsweg: ein virtuelles Directory mit Penrose. Hier
bleiben die Daten auf ihren ursprünglichen Systemen gespeichert und lassen sich auch weiterhin über diese verwalten. Das virtuelle Directory sorgt
für einen einheitlichen Blick auf alle
vorhandenen Daten, unabhängig davon, ob sie sich in einer SQL-Datenbank, einem LDAP-, AD-Verzeichnis-
dienst oder auf einem NIS-Server befinden. Über die LDAP-Schnittstelle
von Penrose lassen sich die so konsolidierten Daten abfragen. Alle Applikationen benötigen damit für den Zugriff
auf die Daten nur noch eine einzelne
Schnittstelle – LDAP.
Ein virtuelles Directory bietet neben
der Konsolidierung von Identity-Informationen weitere Vorteile. So kann es
beispielsweise auch als Proxy für bestehende Directory-Server agieren. Be-
LDAP-Abfragen
Penrose
x-TRACT
2
●
Mit Penrose steht eine mächtiges Identity Management Framework als
Open-Source-Software zur Verfügung.
●
Identitätsinformationen aus LDAP-, SQL-, NIS- oder Active-Directory-Quellen
lassen sich mit Penrose konsolidieren.
●
Mit dem Eclipse-RCP-Client Penrose-Studio existiert ein komfortables GUI zur
Konfiguration des Servers.
Dateien
DBMS
LDAP
Active
Directory
Penrose sorgt für eine Konsolidierung
der unterschiedlichen IdentitySysteme (Abb. 1).
iX 3/2009
Listing 2: conf/connections.xml
Listing 1: conf/server.xml
<server>
<system-property>
<property-name>java.rmi.server.hostname</property-name>
<property-value>rhel5-rhvd.virt.tuxgeek.de</property-value>
</system-property>
<session/>
<adapter name="JDBC">
<adapter-class>org.safehaus.penrose.jdbc.adapter.JDBCAdapter</adapter-class>
</adapter>
<adapter name="LDAP">
<adapter-class>org.safehaus.penrose.ldap.adapter.LDAPAdapter</adapter-class>
</adapter>
<adapter name="NIS">
<adapter-class>org.safehaus.penrose.nis.adapter.NISAdapter</adapter-class>
</adapter>
<root>
<root-dn>uid=admin,ou=system</root-dn>
<root-password>secret</root-password>
</root>
[...]
<connections>
<connection name="rhel5-ds"> <adapter-name>LDAP</adapter-name>
<parameter> <param-name>java.naming.security.credentials</param-name>
<param-value>redhat123</param-value> </parameter>
<parameter> <param-name>java.naming.provider.url</param-name>
<param-value>ldap://rhel5-ds.virt.tuxgeek.de/</param-value> </parameter>
<parameter> <param-name>java.naming.security.principal</param-name>
<param-value>cn="Directory Manager"</param-value> </parameter>
</connection>
<connection name="rhel5-db"> <adapter-name>JDBC</adapter-name>
<parameter> <param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value> </parameter>
<parameter> <param-name>url</param-name>
<param-value>jdbc:mysql://rhel5-rhvd.virt.tuxgeek.de/jdbc?autoReconnect=true</param-value> </parameter>
<parameter> <param-name>user</param-name>
<param-value>root</param-value> </parameter>
</connection>
<connection name="winad">
<adapter-name>LDAP</adapter-name>
<parameter> <param-name>java.naming.factory.initial</param-name>
<param-value>com.sun.jndi.ldap.LdapCtxFactory</param-value> </parameter>
<parameter> <param-name>java.naming.provider.url</param-name>
<param-value>ldap://winad.virt.tuxgeek.de/</param-value> </parameter>
<parameter> <param-name>java.naming.security.principal</param-name>
<param-value>cn=Administrator,cn=Users,dc=virt,dc=tuxgeek,dc=de</param-value> </parameter>
<parameter> <param-name>java.naming.security.credentials</param-name>
<param-value>Helsink!</param-value> </parameter>
</connection>
</connections>
Listing 3: conf/sources.xml
nötigt ein Partner Zugriff auf einen bestimmten Teilbaum des Directory, so
lässt sich dieser über die Proxy-Funktion bereitstellen. Für die so exportierten Objekte kann man neue Zugriffsregeln erzeugen, sogenannte AccessControl-Instructions (ACIs). Darüber
hinaus lässt sich über ein virtuelles Directory eine Migration von NIS nach
LDAP durchführen, indem schrittweise
die Umstellung der Clients auf LDAP
erfolgt. Durch einen konsolidierten
Blick auf die NIS-Daten stehen diese ja
über das LDAP-Protokoll ebenfalls zur
Verfügung.
Mit dem Penrose-Server existiert
seit einiger Zeit eine Open-Source-Lösung für ein virtuelles Directory. Ursprünglich entwickelte und vertrieb die
Firma Identyx den Server. Durch die
Übernahme durch Red Hat im Sommer
2008 existiert nun weiterhin eine OpenSource-Version (siehe „Onlinequellen“, [a]). Penrose besteht aus zwei
Komponenten, dem eigentlichen Server, vd-server, und einem EclipseRCP-Client (Rich Client Platform), vdstudio, der per JMX-Schnittstelle (Java
Management Extensions) mit dem Server kommunizieren kann. Mit dem
Client steht ein GUI zur Verwaltung
und Konfiguration von Penrose zur
Verfügung.
Server-Konfiguration
im Detail
Auf der Website des Projekts ([b]) finden sich fertige Installationspakete für
Windows und Linux. Da Penrose jedoch komplett in Java geschrieben ist,
kann eine Installation auf jedem System mit Java-Umgebung erfolgen. Es
setzt ein aktuelles JDK ab Version 1.5
iX 3/2009
voraus. Auf einem Linux-System befindet sich das Server-Root nach erfolgreicher Installation unter /opt/vdserver-2.0/. Penrose bezeichnet jeden
virtuellen Verzeichnisbaum als Partition. Die Default-Partion lässt sich
über den Ordner conf/ einrichten. Sollten weitere Partitionen vorhanden
sein, erfolgt deren Konfiguration im
Ordner partitions/. Bei den Partitionen
handelt es sich um Java-Objekte, die
über den Aufruf bestimmter JavaKlassen die Eigenschaften des virtuellen Directory definieren. Sie legen
beispielsweise fest, welche BackendSysteme existieren, wie diese zu erreichen sind und welches Mapping
zwischen den Objekten des BackendSystems und des virtuellen Directory
vorzunehmen ist. Da sämtliche Konfigurationsdateien im XML-Format vorliegen, lassen sie sich manuell editieren.
Alternativ geschieht die Konfiguration
mit dem RCP-Client vd-studio.
Die Konfiguration aller notwendigen
Adapter, mit denen der Server auf die
Backend-Systeme zugreifen kann, erfolgt in der Datei server.xml. Außerdem ist hier neben dem Rechnernamen
auch der Admin-Account für den Server festzulegen. Listing 1 zeigt einen
Ausschnitt.
An dieser Stelle noch ein Hinweis:
Aus Platzgründen sind die gedruckten
Listings teilweise stark gekürzt. Die
vollständigen Listings gibt’s per FTP
über den iX-Listing-Service [c].
Zwei weitere wichtige Dateien sind
connections.xml und sources.xml. Erstere legt die Verbindungsinformationen zu den Backend-Systemen fest.
Möchte man beispielsweise die Benutzerinformationen eines LDAP-Servers, eines Windows-AD und einer
SQL-Datenbank konsolidieren, sind in
<sources>
<source name="dbusers">
<connection-name>rhel5-db</connection-name>
<field name="username" primaryKey="true"/>
<field name="firstName"/>
<field name="lastName"/>
<field name="password"/>
<parameter> <param-name>table</param-name>
<param-value>users</param-value> </parameter> </source>
<source name="ldapusers">
<connection-name>rhel5-ds</connection-name>
<field name="cn"/>
<field name="sn"/>
<field name="uid" primaryKey="true"/>
<field name="userPassword"/>
<parameter> <param-name>objectClasses</param-name>
<param-value></param-value> </parameter>
<parameter> <param-name>scope</param-name>
<param-value>ONELEVEL</param-value> </parameter>
<parameter> <param-name>baseDn</param-name>
<param-value>ou=People,dc=virt,dc=tuxgeek,dc=de</param-value>
</parameter>
<parameter> <param-name>filter</param-name>
<param-value>(objectClass=*)</param-value>
</parameter> </source>
<source name="adusers">
<connection-name>winad</connection-name>
<field name="sAMAccountName" primaryKey="true"/>
<field name="cn">
<field name="sn"/>
<field name="unicodePwd"/>
<field name="userAccountControl"/>
<parameter> <param-name>baseDn</param-name>
<param-value>cn=Users,dc=virt,dc=tuxgeek,dc=de</param-value>
</parameter>
<parameter> <param-name>scope</param-name>
<param-value>ONELEVEL</param-value> </parameter>
<parameter> <param-name>filter</param-name>
<param-value>(objectClass=user)</param-value> </parameter>
<parameter> <param-name>objectClasses</param-name>
<param-value>user</param-value> </parameter>
<parameter> <param-name>authentication</param-name>
<param-value>full</param-value> </parameter> </source>
</sources>
connections.xml drei Verbindungen
einzutragen. Als Adapter kann man logischerweise nur die zuvor in server.
xml definierten verwenden (siehe Listing 2).
In der Datei sources.xml (siehe Listing 3) befinden sich die gewünschten
Applikationsdaten der Backend-Systeme. Mit diesen erzeugt man später den
virtuellen Verzeichnisbaum. Der Parameter <connection-name> bestimmt,
welche Verbindung aus der connections.xml Penrose zum Erreichen einer
bestimmten Applikation benutzt. Des
Weiteren bestimmen die sogenannten
„Fields“ die Art der von einer Appli3
PRAXIS
kation zu beziehenden Information. Je
nach Anwendungstyp kann es sich bei
diesen Feldern um Attribute eines
LDAP-Baums, Spalten aus einer SQLTabelle oder NIS-Map handeln. Penrose baut später einen virtuellen Verzeichnisbaum aus Referenzen zu diesen
Informationen auf. Dies erfolgt durch
eine Art Cross-Referenzierung zwischen den Informationen der hier konfigurierten Felder und den dazu eingeblendeten Attributen des virtuellen
Directory. Dabei bestimmen die über
das virtuelle Directory bereitzustellenden Informationen, welche Felder der
Administrator hier definieren muss.
Möchte man beispielsweise das LDAPAttribut uid verwenden, ist es sinnvoll, es auf das SQL-Feld username
abzubilden. Ein passendes Feld aus
dem AD wäre samAccountName und
bei einem LDAP-Server als Datenquelle benutzt man natürlich das vorhandene uid-Attribut.
Konfigurationswerkzeug
vd-studio 
Hiermit ist die grundlegende Konfiguration der Verbindungs- und Applikationsdaten abgeschlossen. Über das
grafische Frontend vd-studio kann
man nun schon durch die einzelnen
Daten der Backend-Systeme browsen
und sich die dort vorhandenen Benutzerinformationen anzeigen lassen. Das
grafische Frontend befindet sich nach
der Installation in /opt/vd-studio/.
Nach dem initialen Start ist zuerst eine
Verbindung zum Penrose-Server aufzubauen. Unter dem Ordner „Partition“ findet man anschließend die
schon manuell vorgenommene Konfiguration wieder. Die Standard-Partition für den Server lautet DEFAULT.
Unter den Ordnern „Connections“ sowie „Sources“ findet man die Verbin-
Verzeichnisdienste
dungs- und Applikationsdaten. Wie im
Screenshot (Abb. 2) zu sehen, kann
man über das Browser-Fenster auf der
rechten Seite durch die Benutzerdaten
der Applikationen navigieren. Natürlich kann die komplette Konfiguration
auch per vd-studio erfolgen.
Ein virtueller
Directory-Baum
Bisher hat man nichts anderes gemacht, als bestehende Applikationen
mit Datenfeldern und den hierfür notwendigen Verbindungsinformationen
zu definieren. Im nächsten Schritt gilt
es, den eigentlichen virtuelle LDAPBaum aus diesen Informationen zusammenzusetzen. Je nachdem, was
man genau machen möchte, sieht die
hierfür notwendige Konfiguration anders aus. Das Beispiel in diesem Artikel erzeugt ein neues Directory mit
dem RootDN dc=example,dc=com
und zwei Containern, die die Benutzer-Informationen der jeweiligen Quelle in einem eigenen Sub-Container
halten. Auf Wunsch lassen sich die Informationen in einem einzelnen Container zusammenfassen. Möchte man
allerdings Benutzerinformationen mit
gleichen Eigenschaften von verschiedenen Applikationen konsolidieren, sollte
man nur Attribute verwenden, die mehrere Werte aufnehmen können.
In conf/directory.xml erfolgt zuerst
die Definition der RootDN. Dies geschieht durch das Setzen einer Konstanten und der passenden LDAP-Objektklasse. Anschließend lassen sich
die beiden Sub-Container ou=Employees und ou=Customer, inklusive der
Applikations-Container, ebenfalls durch
das Setzen einer Konstanten und der
Auswahl der passenden Objektklasse
erzeugen. Welche Klasse man wählt,
hängt von den Attributen ab, die das
Über den
vd-studio-Browser
lässt sich bereits auf
die konfigurierten
Identify-Applikationen zugreifen
(Abb. 2).
4
Listing 4: conf/directory.xml
<directory>
<entry dn="dc=example,dc=com">
<oc>dcObject</oc>
<oc>top</oc>
<at name="dc" rdn="true">
<constant>example</constant> </at> </entry>
<entry dn="ou=Employees,dc=example,dc=com">
<oc>organizationalUnit</oc>
<oc>top</oc>
<at name="ou" rdn="true">
<constant>Employees</constant> </at> </entry>
<entry dn="ou=ldap,ou=Employees,dc=example,dc=com">
<oc>organizationalUnit</oc>
<oc>top</oc>
<at name="ou" rdn="true">
<constant>ldap</constant> </at> </entry>
<entry dn="ou=winad,ou=Employees,dc=example,dc=com">
<oc>organizationalUnit</oc>
<oc>top</oc>
<at name="ou" rdn="true">
<constant>winad</constant> </at> </entry>
<entry dn="ou=Customer,dc=example,dc=com">
<oc>organizationalUnit</oc>
<oc>top</oc>
<at name="ou" rdn="true">
<constant>Customer</constant> </at> </entry>
<entry dn="ou=sql,ou=Customer,dc=example,dc=com">
<oc>organizationalUnit</oc>
<oc>top</oc>
<at name="ou" rdn="true">
<constant>sql</constant> </at> </entry>
</directory>
virtuelle Directory anbieten soll. Unterhalb des Ordners schema/ befinden
sich alle zur Verfügung stehenden
Schemata. Im grafischen Frontend vdstudio erledigt man diese Arbeit durch
das Anlegen eines statischen Directory-Eintrags unterhalb der DefaultPartition. In der entsprechenden Maske
lässt sich dann die gewünschte Objektklasse für den Eintrag auswählen.
Danach sollte directory.xml wie in
Listing 4 aussehen.
Im folgenden Schritt muss man
ebenfalls in conf/directory.xml die
Umsetzung zwischen den Informationen der Backend-Systeme und den Attributen des virtuellen Directory festlegen. Über vd-studio erzeugt man
hierfür einen dynamischen DirectoryEintrag unterhalb des Containers, der
die Benutzerinformationen eines Backend-Systems aufnehmen soll. Auch
hier ist wieder darauf zu achten, die
passende Objektklasse auszuwählen,
damit man auf alle notwendigen Attribute für die neuen Objekte zurückgreifen kann. Jedes Attribut des virtuellen
Directory lässt sich mit einer Information der Applikation eines BackendSystems verknüpfen. Wahlweise kann
man einem Attribut auch wieder eine
Konstante zuweisen oder ein BeanShell-Skript übergeben. Letztere Methode ist ganz interessant, möchte man
vorhandene Informationen in einer bestimmten Art konvertieren oder den
Inhalt vor einer Weiterverarbeitung
überprüfen. Listing 5 stellt den SubContainer ou=winad,ou=Employees
dar. Neben dem Mapping von AD-AtiX 3/2009
Listing 5: conf/direcory.xml
Listing 6: Auszug der Ausgabe von ldapsearch
<entry dn="uid=...,ou=winad,ou=Employees,dc=example,dc=com">
[...]
<entry-class>org.safehaus.penrose.directory.DynamicEntry</entry-class>
# swhite, sql, Customer, example.com
<oc>inetOrgPerson</oc>
dn: uid=swhite,ou=sql,ou=Customer,dc=example,dc=com
<oc>organizationalPerson</oc>
objectClass: inetOrgPerson
<oc>person</oc>
objectClass: organizationalPerson
<oc>top</oc>
objectClass: person
<at name="cn"> <variable>adusers.cn</variable> </at>
objectClass: top
<at name="sn"> <variable>adusers.sn</variable> </at>
cn: Scott White
<at name="uid" rdn="true"> <variable>adusers.sAMAccountName</variable> </at>
sn: White
<at name="userPassword"> <variable>adusers.unicodePwd</variable> </at>
uid: swhite
<source alias="adusers">
userPassword:: a1doMXQyz
<source-name>adusers</source-name>
[...]
<field name="cn"> <variable>cn</variable> </field>
# foo, winad, Employees, example.com
<field name="sn"> <variable>sn</variable> </field>
dn: uid=foo,ou=winad,ou=Employees,dc=example,dc=com
<field name="sAMAccountName"> <variable>uid</variable> </field>
objectClass: inetOrgPerson
<field name="unicodePwd">
objectClass: organizationalPerson
Listing 7: conf/directory.xml
<expression foreach="userPassword" var="p">
objectClass: person
import org.safehaus.penrose.util.*;
objectClass: top
<entry dn="ou=winad,ou=Employees,dc=example,dc=com">
if (p == void || p == null) return null;
cn: foo bar
[...]
return ActiveDirectoryUtil.toUnicodePassword(p);
sn: bar
<aci subject="self"> <permission>rws</permission> </aci>
</expression>
uid: foo
<aci>
</field>
userPassword:: x8eoWBQyt
<target>ATTRIBUTES</target>
<field name="userAccountControl" operations="add">
[...]
<attributes>userPassword</attributes>
<constant>512</constant>
<action>deny</action>
</field>
Listing 8: Änderungen der config.ldif
<permission>rs</permission>
</source>
<scope>SUBTREE</scope> </aci>
</entry>
dn: cn=PKCS12,cn=Key Manager Providers,cn=config
<aci> <permission>rs</permission> </aci>
[...]
</entry>
ds-cfg-enabled: true
ds-cfg-key-store-file: config/tmp/penrose.pk12
ds-cfg-key-store-pin-file: config/tmp/penrose.pin
tributen wird hier jedem virtuellen Directory-Objekt ein userAccountControl-Attribut mit einer Konstanten „512“
zugewiesen. Ein BeanShell-Skript überprüft den Inhalt des unicodePwd-Attributs. Die Verknüpfung der Informationen aus einer SQL-Datenbank oder
iX 3/2009
dn: cn=LDAPS Connection Handler,cn=Connection Handlers,cn=config
[...]
ds-cfg-enabled: true
ds-cfg-listen-port: 10636
ds-cfg-allow-start-tls: false
ds-cfg-use-ssl: true
ds-cfg-ssl-cert-nickname: penrose-cert
ds-cfg-key-manager-provider: cn=PKCS12,cn=Key Manager Providers,cn=config
5
Verzeichnisdienste
PRAXIS
Datenquellen
LDAP
dc=companyA, dc=com
ou=People
SQL-Datenbank
Customer TABLE
Benutzerinformationen
aller drei Quellen stehen
nun über den virtuellen
Verzeichnisbaum zur
Verfügung (Abb. 3).
Active Directory
dc=companyB, dc=com cn=Users
virtueller Verzeichnisbaum
LDAP dc=example, dc=com
ou=Employees, ou=ldap
ou=Employees, ou=winad
ou=Customer, ou=sql
einem anderen LDAP-Server sehen
ganz ähnlich aus und lassen sich über
den Menüpunkt „New Dynamic Entry“ aus vd-studio heraus erzeugen –
wahlweise auch manuell über die Datei directory.xml.
Hat man nun alle notwendigen Konfigurationen vorgenommen, steht, wie in
Abbildung 3 zu sehen, ein neuer Directory-Baum dc=example,dc=com bereit. Alle Benutzerinformationen lassen sich nun per ldapsearch -x -h
rhel5-rhvd.virt.tuxgeek.de -p 10389
-D uid=admin,ou=system -w secret -b
dc=example,dc=com über die LDAPSchnittstelle abfragen. Listing 6 zeigt
Teile der Ausgabe.
Ausgefeilte
Zugriffskontrolle möglich
Mit den oben genannten ACIs lässt
sich eine fein granulierte Zugriffskontrolle für beliebige Objekte und Attribute des Verzeichnisbaums einrichten. Dabei können untergeordnete
Objekte die ACIs der höheren Ebene
erben. Ein Eintrag zur Zugriffssteuerung besteht aus den folgenden Komponenten:
Subjekt: Gibt an, für wen diese ACI
gilt. Üblicherweise erfolgt die Darstellung des Subjekts über einen DN (Distinguished Name), es sind jedoch auch
Einträge wie „anonymous“, „authenticated“, „anybody“, „self“ oder „user“
erlaubt.
Target: Bestimmt das Objekt/Attribut, für das die Zugriffseinschränkung
gelten soll. Beispielsweise könnte man
einen Eintrag für das Attribut userPassword erzeugen.
Scope: Legt fest, ob der ACI-Eintrag nach unten zu vererben ist. Gültige
Werte sind „SUBTREE“ und „OBJECT“.
Action: Legt die Zugriffserlaubnis
fest. Mögliche Werte hier sind „deny“
oder „allow“.
Berechtigung: Die eigentliche Zugriffsberechtigung. Hier stehen zur
Auswahl: „Read“, „Search“, „Write“,
„Add Children“ und „Delete“.
Wie das Beispiel in Listing 7 zeigt,
muss der ACI-Eintrag in conf/directory.xml im passenden Container erfolgen.
Sicherer Zugriff
auf die Daten
Selbstverständlich lässt sich die
LDAP-Schnittstelle von Penrose auch
über TLS abfragen, sodass die Daten
gesichert über die Leitung fließen.
Dies erfordert zunächst ein X.509-Zertifikat im PKCS#12-Format. Auf einem Linux-System lässt sich zu Testzwecken per certutil einfach ein
Onlinequellen
[a]
[b]
[c]
[d]
Penrose
Penrose-Server/Studio-Download
iX -Listing-Service
Penrose-Dokumentation
penrose.safehaus.org
docs.safehaus.org/display/PENROSE/Download
ftp.heise.de/pub/ix/ix_listings/
docs.safehaus.org/display/PENROSE20/Documentation
selbstsigniertes Zertifikat erzeugen
und anschließend via pk12util exportieren.
cd /opt/vd-server-2.0
mkdir tmp
certutil -N -d .
certutil -d . -S -s "cn=FQDN" -n penrose-cert -x -m
1000 -t P,,
pk12util -d . -n penrose-cert -o penrose.pk12
Für die Benutzung eines CA-signierten Zertifikats erzeugt certutil auf
Wunsch eine Zertifikats-Anfrage, die
man an eine CA senden kann. In der
Konfigurationsdatei des integrierten
LDAP-Servers fehlt nun noch der Dateiname des PKCS#12-Zertifikats, im
obigen Beispiel penrose.pk12. Zusätzlich ist in einer zweiten Datei das
Passwort dafür zu hinterlegen. Als integrierten LDAP-Server verwendet
Penrose den von Sun entwickelten
OpenDS. Dessen Konfigurationsdatei
befindet sich unter services/OpenDS/
config/. Die in Listing 8 gezeigten
Einstellungen in config.ldif schließen
die Konfiguration ab.
Nach einem Neustart von Penrose
lauscht der Server nun auch auf dem
Port 10636 auf eingehende LDAPSAnfragen. Möchte man mit den
OpenLDAP-Tools auf den Server zugreifen, muss man das CA- oder Server-Zertifikat nach /etc/openldap/cacerts/ kopieren. Anderenfalls können
Clients das Penrose-Server-Zertifikat
nicht verifizieren und ein LDAPS-Verbindungsaufbau scheitert.
Fazit
Penrose ist ein mächtiges Tool, das
das Verwalten unterschiedlicher Identitätsquellen extrem vereinfacht. Dies
ist gerade dann interessant, wenn eine
Anwendung einen konsolidierten Blick
auf die vorhandenen Nutzerdaten benötigt. Das grafische Frontend vd-studio ist in der aktuellen Version noch
etwas fehleranfällig, aber dank einer
umfangreichen Dokumentation [d] fällt
das manuelle Bearbeiten der XMLbasierten Konfigurationsdateien nicht
schwer.
(avr)
THORSTEN SCHERF
arbeitet als Consultant und Trainer für
Red Hat EMEA und ist auf den Bereich
Security spezialisiert.
iX-Link ix0903
6
x
iX 3/2009
Herunterladen