Autor Thema: LDAP Passwort vs. Domino Passwort  (Gelesen 3755 mal)

Offline arcon

  • Frischling
  • *
  • Beiträge: 47
  • Geschlecht: Männlich
  • Notes4Ever
LDAP Passwort vs. Domino Passwort
« 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();
      }
   }
}



Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:LDAP Passwort vs. Domino Passwort
« Antwort #1 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
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline arcon

  • Frischling
  • *
  • Beiträge: 47
  • Geschlecht: Männlich
  • Notes4Ever
Re:LDAP Passwort vs. Domino Passwort
« Antwort #2 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  ???

Axel Janssen temp

  • Gast
Re:LDAP Passwort vs. Domino Passwort
« Antwort #3 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
 

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:LDAP Passwort vs. Domino Passwort
« Antwort #4 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

Axel Janssen temp

  • Gast
Re:LDAP Passwort vs. Domino Passwort
« Antwort #5 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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz