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}






sábado, 12 de abril de 2008

viernes, 21 de marzo de 2008

BEA Virtualization - Welcome to the Java Next Level

JMX (Java Management Extensions) en WLS 8.1


Especifica estándares para automatizar la administración de dispositivos usando Java como lenguajes de control.
Desacopla la gestión de dispositivo de las herramientas de gestión.
El vendedor del dispositivo desarrolla “Management Beans” (MBeans) con su dispositivo. Asi los clientes pueden automatizar la gestión de dispositivos.

Un MBean es una construcción JMX que representa un recurso manejado. Cada recurso manejado en WLS usa MBeans para proporcionar una interfaz para monitorizar o modificar el recurso.

WLS MBeans suministra todas las operaciones estándar definidas en la especificación JMX, como:
  • Constructores para instancias MBeans.
  • Métodos para obtener y establecer los atributos de MBeans.
  • Métodos para realizar operaciones adicionales especificas de MBeans.
  • Notificaciones para eventos broadcast MBean.
WLS proporciona MBeans para administrar todos los aspectos del servidor de aplicaciones, como por ejemplo:
  • Aplicaciones (Web, EJB,...)
  • Seguridad.
  • Dominios, servidores, cluster.
  • Logs
  • Servicios (JDBC, JMS, SNMP, XML)

Las herramientas de gestión WLS están implementadas en JMX:
  • Consola de administración.
  • Comando weblogic.Admin
  • Comando weblogic.Deployer
  • Herramientas de terceros

El Tipo de un MBean, es el nombre de la interfaz sin el sufijo MBean.

El Nombre de un MBean esta disponible cuando seleccionas el objeto de la consola (mira el atributo “Name”) o usando el comado weblogic.Admin GET –type tipo

Los Atributos en un MBean, revisa los métodos de acceso y elimina el prefijo “set” o “get”, o usa el comando weblogic.Admin GET

Sintaxis:
java weblogic.Admin [-url URL] [{-username username [-password password] } | {[-userconfigfile configfile] [-userkeyfile adminkey] } ] COMANDO argumentos

CONNECT – Hace el numero especificado de conexiones a WLS y devuelve el tiempo empleado.
FORCESHUTDOWN – Termina inmediatamente un proceso WLS.
GETSTATE – Devuelve el estado actual de WLS.
HELP – Proporciona ayuda de la sintaxis y uso de los comandos.
LICENSES – Lista las licencias para todas las instancias de WLS instaladas en un servidor especifico.
LIST – Lista los nodos del arbol JNDI.
MIGRATE – Migra un servicio JMS o JTA a un servidor objetivo del cluster.
PING – Envia un mensaje para comprobar que WLS esta escuchando en un puerto.
RESUME – Cambia al servidor de estado STANBY a RUNNING.
SERVERLOG – Muestra el fichero de log de un servidor especifico.
SHUTDOWN – Para un servidor.

Ejemplos:

java weblogic.Admin -url waswas.tsm.inet:30660 -username system -password T1f0n FORCESHUTDOWN MiServidor3

java weblogic.Admin HELP PING

java weblogic.Admin -url ManagedHost:8001 -username weblogic -password weblogic THREAD_DUMP




Gestión de MBeans

CREATE – Crea un MBean de administración. Devuelve OK si tiene éxito.
DELETE – Borra un MBean. Devuelve OK a la salida estandar si tiene éxito.
GET – Muestra las propiedades de un MBean.
INVOKE – Invoca operaciones de gestión en MBean.
SET – Establece el valor a la propiedad especificada del MBean.


Todos los comandos de gestión de MBeans pueden aceptar el argumento –type, que opera sobre todos los MBeans del tipo especificado de la instancia.

java weblogic.Admin -username weblogic -password weblogic GET -type ServerRuntime -property State




Principales parámetros a monitorizar con JMX

ServerRuntime
  • State, OpenSocketsCurrentCount
ExecuteQueueRuntime
  • ExecuteThreadCurrentIdleCount, PendingRequestCurrentCount.
JVMRuntime
  • HeapSizeCurrent
JDBCConnectionPoolRuntime
  • ActiveConnectionsCurrentCount, ConnectionsHighCount, LeakedConnectionCount, ConnectionDelayTime, FailuresToReconnect



La utilidad weblogic.Deployer es una utilidad java que nos permite realizar tareas de despliegue.

Te permite desplegar una nueva aplicación, actualizar una aplicación existente, o undeploy una aplicación.

Para usar weblogic.Deployer:
  • Establece tu entorno, para que las clases de WLS estén en tu classpath y JDK. Puedes usar del script setenv para establecer el classpath.
Sintaxis:

java weblogic.Deployer [ opciones ] [-deploy | -undeploy | -redeploy | -start | -stop | -listapps] [file (s)]

Desplegar una nueva aplicación:
java weblogic.Deployer –adminurl http://admin:7001 –name vflive –source /tmp/vflive.ear –targets server1,server2 –deploy

Redesplegar una aplicación:
java weblogic.Deployer –adminurl http://admin:7001 –name vflive –redeploy


Mas información

jueves, 20 de marzo de 2008

Configura tus Network Channels en WebLogic Server 8.1


En entornos de producción, a veces es necesario segregar el tráfico de red. WebLogic nos permite controlar este trafico de red asociado a nuestras aplicaciones


Para lo cual puedes especificar la NIC y los puertos usados por los servidores manejados, especificar entre múltiples protocolos, tamaño de mensajes …

Para lo cual puedes desde la consola Administrativa crearlo en Servers>Protocols>Channels o empleando el MBean NetworkAccessPoint directamente en el fichero de config.xml, si te sucede como nos sucedió en una ocasión en la cual no podíamos acceder a la consola administrativa de WLS 8.1 gracias a una “maravillosa” regla en un Firewall.


Para lo cual, lo que hicimos fue meter en el config.xml una línea como la siguiente:


Después de añadir esta línea en el config.xml, simplemente habría que reiniciar el servidor administrativo y ya estaría todo…. Mas fácil imposible ¡!!


Este articulillo me gustaría ofrecérselo a un administrador de weblogic que sostenía que esto de los Network Channels no existia y que eran “invenciones” mías, y dedicárselo a mi joven Padawan Pablo Yuste el cual creyó en mis enseñanzas y las defendió creyendo en mi palabra.

lunes, 4 de febrero de 2008

Tuning Java Virtual Machines (JVMs): Java Heap

Garbage collection es el proceso de la VM que recoloca objetos Java sin usar en la pila Java. La pila Java es donde están los objetos vivos de un programa java. Es un repositorio para objetos vivos, muertos y memoria libre. Cuando un objeto no puede ser referenciado por ningún puntero del programa en ejecución es considerado como basura

*El tamaño de la pila de la JVM determina con que frecuencia y cuanto tiempo empleará la VM realizando recolección de basura. Un ratio aceptable para la recolección de basura de una aplicación debería ajustarse después de analizar el tiempo y la frecuencia con que se realizan los GC.

*El objetivo de tunear el tamaño de la pila es minimizar la duración del GC, mientras maximizas el número de clientes que puede manejar en un momento dado.

En el Heap podemos distinguir 3 zonas:










  • New o Young Generation: Los objetos inicialmente se situan aqui
Eden = NewSize – ((NewSize / (SurvivorRatio + 2)) * 2)
From Space = (NewSize – Eden / 2)

To Space = (NewSize – Eden) / 2)


-XX:NewSize
-XX:MaxNewSize
-XX:NewRatio
-XX:SurvivorRatio
*
  • Old o Tenured Generation: Aqui encontraremos objetos con larga vida
*
-XX:OldSize -XX:MinHeapFreeRatio
* -XX:MaxHeapFreeRatio

  • Permanet Generation: Almacena clases de objetos
*
*
-XX:PermSize
-XX:MaxPermSize
* -Xnoclassgc

Un objeto es basura cuando no puede ser alcanzado (no tiene referencias fuertes) desde ningún punto del programa que se está ejecutando. El método más directo de recolección de basura es iterar sobre cada objeto alcanzable, y se asume que todos aquellos por los que no se pase son basura. Este enfoque tarda un tiempo proporcional al número de objetos vivos, lo que es prohibitivo para grandes aplicaciones que mantienen gran cantidad de objetos vivos.

Versiones recientes de la JVM incorporan una serie de diferentes algoritmos de recolección de basura que se combinan utilizando la recolección generacional. Mientras la recolección ordinaria examina cada objeto vivo en el heap, la recolección generacional aprovecha ciertas propiedades de las aplicaciones observadas empíricamente para evitar trabajo extra.


La recolección de basura se produce en cada generación cuando ésta se llena. Los objetos se sitúan en el edén y, debido a la mortalidad infantil, la mayoría muere ahí. Cuando el edén se llena se produce una recolección menor en la que algunos objetos supervivientes se mueven a una generación más vieja. Cuando las generaciones viejas se llenan se produce una recolección mayor que, generalmente, es mucho más lenta debido a que involucra a todos los objetos vivos.

Cuanto más tiempo sobreviva un objeto, más recolecciones pasarán sobre él, y el recolector de basura se volverá más lento. La recolección de basura será más eficiente haciendo que los objetos no sobrevivan a la primera recolección. Las aplicaciones pueden trastornar esta situación ideal con distribuciones de tiempo de vida inusuales o con generaciones de tamaño pequeño que causan recolecciones con demasiada frecuencia.

Existen varias técnicas para desarrollar Garbage Collection. Las más utilizadas son marcar y barrer (mark-and-sweep) y recolección por copia (copying collection).