sábado, 2 de marzo de 2013

Usando ldapsearch para solucionar problemas de configuración LDAP en IBM WebSphere Application Server



Hay muchas cosas que pueden impedir la configuración de LDAP funcione correctamente.
  • El DN (Distinguished Name) no esta en la ACL (Lista de control de Acceso) y por lo tanto no puede realizar ciertas consultas LDAP.
  • DN fue bloqueado  debido a demasiados intentos de conexión fallidos.
  • La contraseña del DN puede haber sido cambiada.
  • El servidor LDAP no puede permitir consultas anónimas.
  • El filtro predeterminado en el servidor de aplicaciones pueden no ajustarse a la configuración de los clientes. (Es decir, no hay definido objectclass=someObjectClass).
  • El Firewall no permite la comunicación con el puerto
  • ID del administrador LDAP que se utiliza para la identificación del servidor, pero el ID del administrador no se define como un usuario normal


Por estos y muchos otros problemas de configuración posibles la mejor forma de depurar rápidamente el problema es utilizar ldapsearch.
ldapsearch nos permite ver lo que está  devolvinedo la consulta, normalmente oculto por el Application Server.

La idea es utilizar las mismas opciones de configuración, en la línea de comandos, como se ha definido en


consola WAS > Security > user Registries > LDAP settings


Security Server ID
Nombre corto del identificador que consulta el LDAP.
Security Server Password
Password del ID en el LDAP
Directory Type
Lista predefinida de servidores LDAP soportados.
Host
Nombre de host del servidor LDAP. Puede ser el nombre corto, largo nombre o la dirección IP.
Port
389 es el puerto por defecto del servidor LDAP
Base Distinguished Name
(BaseDN)
Localización inicial de la consulta LDAP
Bind Distinguished Name
(BindDN)
Fully qualified DN que tiene la autoridad de realizar “bind” en el servidor LDAP y realizar consultas. Algunos servidores LDAP permiten consultas anónimas
Bind Password
Password de bind del DN’s


Propiedades avanzadas de LDAP

User Filter
String usado para consultar al servidor LDAP.
User ID Map
Define que será mostrado en WebSphere del resultado de la consulta.



ldapsearch –h <Host> -p <Puerto> -b “<BaseDN>” –D <BindDN> -w <Bind Password> “<User Filter>”


Ejemplos:

ldapsearch –h mariano.ldap.server -p 389 -b "o=ibm,c=us" uid=test
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test



ldapsearch -h mariano.ldap.server -p 389 -b "o=ibm,c=us" "(&(uid=test)(objectclass=ePerson))"
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test





La consulta  de ldapsearch podría causar una excepción para el servidor de aplicaciones:

A continuación fallaría en Application Server porque el filtro de búsqueda está buscando un objectclass de "XYZ", pero no hay objectclass  "XYZ" definido LDAP. Esto da como resultado una cadena de retorno vacío.




ldapsearch -h mariano.ldap.server -p 389 -b "o=ibm,c=us" "(&(uid=test)(objectclass=XYZ))"



La siguiente busqueda fallaría en el Application Server porque 2 DN se devuelven en lugar de 1. Application Server sólo se autenticará utilizando un único DN. Si la consulta es uid=test en lugar de cn=test, entonces sólo un DN habría sido devuelto.




ldapsearch -h mariano.ldap.server -p 389 -b "o=ibm,c=us" "(&(cn=test)(objectclass=ePerson))"
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test

cn=test,ou=Larry's Group,ou=Austin,o=ibm,c=us
sn=User
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
cn=Test




 Troubleshooting basico

  

Referencias de error  SECJ0369E y SECJ0055E se pueden generar en el SystemOut.log. Hay, sin embargo, diversas causas de raíz que se pueden derivar de los valores que siguen a la descripción inicial. Un ejemplo se muestra a continuación.

[date/time] 0000000a LdapRegistryI A SECJ0419I: The user registry is currently connected to the LDAP server ldap://<hostname>:389.
[date/time] 0000000a LTPAServerObj E SECJ0369E: Authentication failed when using LTPA. The exception is [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 775, vece ].
[date/time] 0000000a distContextMa E SECJ0270E: Failed to get actual credentials. The exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 775, vece ]
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3005)




Errores comunes de bind en Active Directory LDAP



--> 80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 525, v893
HEX: 0x525 - user not found
DEC: 1317 - ERROR_NO_SUCH_USER
(The specified account does not exist.)
NOTA: lo devuelve cuando el usuario no existe

80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 52e, v893
HEX: 0x52e - invalid credentials
DEC: 1326 - ERROR_LOGON_FAILURE
(Logon failure: unknown user name or bad password.)
NOTA: Lo devuelve cuando el usuario es valido, pero las credenciales/password es invalido. 


80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 530, v893
HEX: 0x530 - not permitted to logon at this time
DEC: 1328 - ERROR_INVALID_LOGON_HOURS
(Logon failure: account logon time restriction violation.)
NOTA: Lo devuelve solo cuando se presenta con un usuario y credenciales validas.



80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 531, v893
HEX: 0x531 - not permitted to logon from this workstation
DEC: 1329 - ERROR_INVALID_WORKSTATION
(Logon failure: user not allowed to log on to this computer.)
LDAP[userWorkstations: <multivalued list of workstation names>]
NOTA:
Lo devuelve solo cuando se presenta con un usuario y credenciales validas.

80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 532, v893
HEX: 0x532 - password expired
DEC: 1330 - ERROR_PASSWORD_EXPIRED
(Logon failure: the specified account password has expired.)
LDAP[userAccountControl: <bitmask=0x00800000>] - PASSWORDEXPIRED
NOTA:
Lo devuelve solo cuando se presenta con un usuario y credenciales validas.

80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 533, v893
HEX: 0x533 - account disabled
DEC: 1331 - ERROR_ACCOUNT_DISABLED
(Logon failure: account currently disabled.)
LDAP[userAccountControl: <bitmask=0x00000002>] - ACCOUNTDISABLE
NOTE: Returns only when presented with valid username and password/credential.

80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 701, v893
HEX: 0x701 - account expired
DEC: 1793 - ERROR_ACCOUNT_EXPIRED
(The user's account has expired.)
LDAP[accountExpires: <value of -1, 0, or extemely large value indicates account will not expire>] - ACCOUNTEXPIRED
NOTE:
Lo devuelve solo cuando se presenta con un usuario y credenciales validas.
 
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 773, v893
HEX: 0x773 - user must reset password
DEC: 1907 - ERROR_PASSWORD_MUST_CHANGE
(The user's password must be changed before logging on the first time.)
LDAP[pwdLastSet: <value of 0 indicates admin-required password change>] - MUST_CHANGE_PASSWD
NOTE:
Lo devuelve solo cuando se presenta con un usuario y credenciales validas.
 
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 775, v893
HEX: 0x775 - account locked out
DEC
: 1909 - ERROR_ACCOUNT_LOCKED_OUT (The referenced account is currently locked out and may not be logged on to.)
LDAP[userAccountControl: <bitmask=0x00000010>] - LOCKOUT
NOTE: Lo devuelve solo si presentas password invalidos.
















jueves, 28 de febrero de 2013

Service Integration Bus Explorer en WebSphere Application Server 6.1

 

Service Integration Bus Explorer en WebSphere Application Server 6.1



EL Service Integration Bus Explorer es una herramienta independiente que permite una navegación más natural y supervisión de los componentes de mensajería del  SI Bus. El SI Bus fue presentado como el proveedor de mensajería por omisión de WebSphere Application Server 6 y WebSphere ESB. Esta herramienta puede ayudar a un administrador o usuario del bus en la visualización de los recursos disponibles y sus estados y en permitir la gestión limitada del sistema.




Es una herramienta escrita 100% en Java ™ y habla directamente a un servidor de aplicaciones (o un gestor de despliegue) a través del cliente de administración e interfaces MBean que ya están incluidas en WebSphere Application Server.
La interfaz gráfica de usuario utiliza el Widget Toolkit Standard: una tecnología que la plataforma Eclipse utiliza. Esto le da a la herramienta de la ventaja añadida de parecer y llevar a cabo como una aplicación nativa de GUI.


Instrucciones de Instalacion 

  1. Descargar y descomprimir las bibliotecas SWT de Eclipse en un directorio.   

  2. Descargar y descomprimir el Bus SI Explorador de código de cliente en un directorio. 

  3. En plataformas Windows ®, edite el env.bat archivo en tu editor de texto favorito. En UNIX ® basados en plataformas, edite el archivo env.sh. 

       Este archivo contiene tres varibables medio ambiente que deben ser adaptados a la configuración específica del sistema:

               - La variable se debe apuntar a su directorio de instalación de WebSphere.
               - La variable SWTJARS debe apuntar al directorio que contiene los JAR descargados SWT.
               - La variable de CUR debe apuntar al directorio que contiene el cliente SI Bus Explorer.


       4. Ahora podemos iniciar la herramienta ejecutando ejecutando el script el sibexplorer (. bat o sh.)



mariano:/var/log/was/mariano/sibexplorer ls -lrt
total 5920
-rwxr-xr-x 1 wasrun apps 2459    2006-06-05 15:14 sibexplorer.bat
-rwxr-xr-x 1 wasrun apps 2255    2006-12-07 08:01 sibexplorer.sh
-rwxr-xr-x 1 wasrun apps 484614  2006-12-07 11:36 explorer.jar
-rwxr-xr-x 1 wasrun apps 2073870 2008-06-18 08:54 swt-debug.jar
-rwxr-xr-x 1 wasrun apps 1488516 2008-06-18 08:54 swt.jar
-rwxr-xr-x 1 wasrun apps 1943455 2008-06-18 08:54 src.zip
-rwxr-xr-x 1 wasrun apps 7881    2008-06-18 08:54 about.html
-rwxr-xr-x 1 wasrun apps 1350    2012-11-13 10:58 env.bat
drwxr-xr-x 2 wasrun apps 4096    2012-11-13 11:06 about_files
drwxr-xr-x 3 wasrun apps 4096    2012-11-13 11:06 etc
drwxr-xr-x 3 wasrun apps 4096    2012-11-13 11:06 etc.Prestaciones
drwxr-xr-x 2 wasrun apps 4096    2012-11-13 11:06 licenses
drwxr-xr-x 3 wasrun apps 4096    2012-11-13 11:07 swt-4.2.1-gtk-linux-x86
-rwxr-xr-x 1 wasrun apps 927 2012-11-13 11:20 env.sh






mariano:/var/log/was/mariano/sibexplorer# cat env.sh

################################################
#
# Service Integration Bus Explorer environment script
# Copyright (C) IBM Corp. 2006
#
# This script is run automatically when starting the
# Service Integration Bus Explorer using the 'sibexplorer.sh'
# script. The environment variables in this script should be
# customized to your system before running the 'sibexplorer.sh'
# script.
#
################################################


# This value should be the location of your WebSphere installation
# (E.g. /opt/IBM/WebSphere/AppServer)
WAS=/opt/WebSphere61/AppServer

# This value should be the location of the SWT libraries
# (I.e. the location of your 'swt.jar' file and SWT shared libraries)
SWTJARS=/var/log/was/mariano/sibexplorer/swt-4.2.1-gtk-linux-x86

# This value should be the location of the SIB Explorer client code
# (I.e. the location of your 'explorer.jar' file)
CUR=/var/log/was/mariano/sibexplorer







/var/log/was/mariano/sibexplorer # . ./env.sh
/var/log/was/mariano/sibexplorer # export DISPLAY=10.120.148.32:0.0
/var/log/was/mariano/sibexplorer #./sibexplorer.sh







Consultamos los puertos del servidor de Messaging en la consola administrativa.


 


Consultamos  el puerto SIB_ENDPOINT_SECURE_ADDRESS (7288) ya que especificamos BootstrapSecureMessaging




 


Especificaremos en la pestaña “SSL Options” la ruta del certificado, y la password del keystore de WAS (por defecto es WebAS)






/opt/WebSphere61/AppServer/profiles/dmgrsoadesa01/etc/key.p12
/opt/WebSphere61/AppServer/profiles/dmgrsoadesa01/etc/trust.p12


Password: WebAS


Una vez que esta todo configurado el servidor de mensajeria, nos conectamos a el





En el bus SCA.SYSTEM.SoaDesarrollo01.Bus, vemos el cluster wps612.cluster.Messaging miembro del Bus, y el ME con nombre wps612.cluster.Messaging.000-SCA.SYSTEM.SoaDesarrollo01.Bus, consultamos los Queue Points, y veremos la profundidad de los distintos Queue Points.
Current depth de los distintos Queue Points debería ser 0 o un numero bajo.

Como vemos la profundidad del primer Queue Point es 72.




Podemos ver los mensajes que tiene un Queue Point especifico (haciendo doble click)




 

Y consultar uno de los mensajes





Notas:

La clave por defecto default Key y Trust store  es WebAS. Cifrada seria {xor}CDo9Hgw\=  .

Cuando se instala el servidor de aplicaciones, cada servidor crea un almacén de claves y un almacén de confianza para la configuración SSL por omisión con la contraseña por omisión WebAS. Para proteger la seguridad de los archivos de almacén de claves y de la configuración de SSL, debe cambiar la contraseña. Los ejemplos siguientes actualizan la contraseña por omisión:


Cambie la contraseña de un solo almacén de claves. El mandato changeKeyStorePassword actualiza la contraseña de un almacén de claves individual. Por ejemplo:
  • En Jacl:

$AdminTask changeKeyStorePassword {-keyStoreName testKS -keyStoreScope (cell):localhost:(server):server1 -keyStorePassword WebAS -newKeyStorePassword secretPwd -newKeyStorePasswordVerify secretPwd}