Das Notes Forum

Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: arcon am 13.02.04 - 13:17:43

Titel: LDAP Passwort vs. Domino Passwort
Beitrag von: arcon am 13.02.04 - 13:17:43
Mit diesem Code lese ich aus LDAP die User und Passwörter aus.
Das Problem ist aber das die Passwörter verschlüsselt sind ?

Wie schafe ich es nun dieses Passwort Notes gerecht im Domino Directory (HTTP Password)
bei dem jeweiligen User zu speichern. Primär  geht es darum das das Passwort in LDAP Verschlüsselt
ist und ich nicht weis wie ich es entschlüssle um es dann mit Notesmethoden wieder zu verschlüsseln.

Code
import lotus.domino.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.util.*;

public class JavaAgent extends AgentBase {
// initial context implementation
    public static String initctx = "com.sun.jndi.ldap.LdapCtxFactory";
   public static String host = 
   public static String mgr_DN = 
   public static String mgr_PW = 
   public static String searchBase = "ou=personen";
   public static String filter = "(uid=xxx)";   


   public void NotesMain() {

      try {
         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();

          try {
                 //Hashtable for environmental information
                    Hashtable env = new Hashtable();
                //Specify which class to use for the JNDI provider
                env.put(Context.INITIAL_CONTEXT_FACTORY, initctx);
                 //Specify host and port to use
                env.put(Context.PROVIDER_URL, host);
                  env.put(Context.SECURITY_AUTHENTICATION,"simple");
                  env.put(Context.SECURITY_PRINCIPAL,mgr_DN);
                   env.put(Context.SECURITY_CREDENTIALS,mgr_PW);

                    //Get a reference to a directory context
                    DirContext ctx = new InitialDirContext(env);

                    //Scope of the search:
                    SearchControls constraints = new SearchControls();
                    constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
        
                    //Perform the search:
                    NamingEnumeration results = ctx.search(searchBase,filter,constraints);

                    //Analyse the results
                    if (!results.hasMore()) {
                      System.out.println("Nothing found.");

                 } else {
                        while (results.hasMore()) {

                        SearchResult sr = (SearchResult) results.next(); 
                    System.out.println(sr.getName());
                           Attributes attrs = sr.getAttributes();

                        if (attrs == null) {
                          System.out.println("No attributes");
                        } else { 
                                   for (NamingEnumeration ae = attrs.getAll(); ae.hasMore();) { 
                                  Attribute attr = (Attribute) ae.next(); 
                                  String id = attr.getID(); 
                                  //For each value of the attribute: 
                                  for (Enumeration vals = attr.getAll(); 
                                       vals.hasMoreElements();
                                 System.out.println(" "+id + ": "+ vals.nextElement()));
                                 System.out.println("+++++++++++++++++++++++++++++++");
                                 System.out.println("sn: " + attrs.get("sn").get());
                              if (attrs.get("userPassword") != null){            
                                 System.out.println("pw: " + attrs.get("userPassword").get().toString());
                                 }
                              else
                                 System.out.println("pw: not Found !");
                                   }
                     }
                   }
     }
        
        ctx.close();
      }   

      catch (Exception e) { 
        // Handle any types of exceptions.
        System.err.println(e.getMessage()); 
      }
         

      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}


Titel: Re:LDAP Passwort vs. Domino Passwort
Beitrag von: Axel_Janssen am 13.02.04 - 21:15:21
Hi Arcon,

ich glaube, das musst du der Dokumentation deines LDAP-Servers entnehmen.

Es kann ja nicht sein, dass es in jndi (javax.naming.*) irgendwo eine Klasse mit der Methode

Code
String brauchstDuEntschluesseltesPasswortIchGebeDir(String verschluesseltesPasswort) 

Was du willst ist Single Sign On. (SSO). Vielleicht hilft es, wenn du das mal als Suchbegriff gegen die Doku deines LDAP-Server laufen lässt oder gegen Google.

Ich weiss das Tivoli hierfür ein mächtiges Produkt hat, aber das ist sicher nicht billig.

Gruß Axel

gibt
Titel: Re:LDAP Passwort vs. Domino Passwort
Beitrag von: arcon am 17.02.04 - 11:45:38
Das Problem ist eigentlich das in LDAP das PW nicht verschlüsselt ist sondern ein Plaintext ist
lt. unseres Admins. Wen er mittels Perl die Felder ausliest bekommt er das PW in lesbarer
Form.

Er meint das Java da ein MD5 Crypt macht was mir nicht viel sagt  ???
Titel: Re:LDAP Passwort vs. Domino Passwort
Beitrag von: Axel Janssen temp am 18.02.04 - 18:50:55
ich vermute, du benutzt openLDAP?
Das ganze hat nicht unbedingt was mit JNDI zu tun. Es ist vielmehr openLDAP (oder welchen LdAP-Server du auch immer benutzt) spezifisch. JNDI ist nur eine abstrakte Schnittstelle.

MD5 ist ein Verschlüsselungs-Algorythmus, aber den benutzt du ja nur. Du mußt kein Verschlüsselungs-Algorythmus-Hacker werden. Du mußt nur einen Weg finden wie du die ganze Infrastruktur benutzt.

Ich selbst habe (leider) noch nicht mit JNDI ausserhalb von ein paar absoluten Basic-Sachen im Kontext von APP-Servern gearbeitet.

Hier findest du vielleicht ein paar Hinweise:
http://www.google.de/search?q=JNDI+openLDAP+Password&ie=UTF-8&oe=UTF-8&hl=de&meta=
Durchsuch einfach die zurückgelieferten Treffer nach "Password" mit der Browsersuche.

Es ist natürlich vom Sicherheitsstandpunkt aus völig ok, dass man nicht einfach mit einem Programm Passwörter auslesen kann.

Dies hier läßt darauf schliessen, dass es sehr wohl von Einstellungen in openLDAP abhängt, wie man von JNDI aus mit Passwörtern arbeiten kann:
Code
Finally, we specify the password to be used by this rootdn. Please note that by default, the password is stored in plain text in the configuation file. This is fine for testing purposes, but be sure to read the OpenLDAP manual for detailed information regarding the use of encrypted passwords.

von: http://www.cris.com/~adhawan/tutorial/

Gruß Axel
 
Titel: Re:LDAP Passwort vs. Domino Passwort
Beitrag von: qojote am 18.02.04 - 19:02:31
Hi,

wenn du da ne Lösung gefunden hast wäre ich sehr daran interessiert.
Vielleicht kannst du ja nochmal posten.

Gruß
Qojote
Titel: Re:LDAP Passwort vs. Domino Passwort
Beitrag von: Axel Janssen temp am 18.02.04 - 19:47:25
Also wenn ich das richtig verstanden habe kann man auch mit JNDI sich konkret gegen openLDAP authentifizieren:
Das scheint so zu gehen, dass das in Klartext (mit Sternchen) eingegebene Passwort auch mit dem MD5 Algorythmus verschlüsselt wird und dann gegen das im LDAP enthaltene Passwort verglichen wird.
Nur eben das auslesen von Passörtern geht eben nicht.

Gruß Axel