Entradas

Mostrando las entradas con la etiqueta seguridad

Presentando MP Lemon Builder

Imagen
Aquí les presento la primera versión de mi aplicación MP Lemon Builder . ¿En qué consiste? Es un generador de proyectos MP (MicroProfile), y en esta primera versión permite crear una aplicación asegurada con JWT. La autenticación utilizará el realm del servidor (en esta primera versión utiliza a Payara) y la validación de los roles lo hará utilizando el estándar de JakartaEE. Aquí muestro un vídeo de cómo funciona. Fuentes Esta aplicación está basada en dos proyectos: La publicación de Victor Orozco: A simple MicroProfile JWT token provider with Payara realms and JAX-RS JWT dispenser de Adam Bien . ¿Por qué "Lemon"? Porque me gustan las frutas, y el limón es una de mis preferidas.

Autenticación y Autorización de aplicaciones Java Web

Imagen
Autenticación es el proceso de asegurar que un usuario es quien dice ser. Comúnmente se le da la seguridad usando un id de usuario y su respectiva contraseña. Autorización es el proceso de asegurar que ciertos usuarios tengan un perfil específico para acceder a ciertos recursos autorizados. En este vídeo veremos cómo implementar la autenticación y autorización en una aplicación web típica. Pero ... nosotros no programaremos a la base de datos, tampoco cómo deberá acceder ciertas páginas usando alguna condición "if", nada de eso. Lo que haremos será configurar el GlassFish para que se encarga de buscar en la base de datos, y permitir el acceso a recursos (o carpetas) de nuestra página web.

Java EE 6 Cookbook for Securing, Tuning, and Extending Enterprise Applications

Imagen
@Mick Knutson publica su libro " Java EE 6 Cookbook for Securing, Tuning, and Extending Enterprise Applications " donde se muestra, de manera general y concisa, los aspectos de seguridad, rendimiento y mejorar las aplicaciones Java EE 6. Aquí, mis comentarios del libro.

Contraseñas encriptadas con Java

Imagen
¿Quién no ha querido encriptar texto o archivo? Hay diversas maneras para hacer eso, por ejemplo, utilizando un diccionario donde se reemplazara cada caracter por un código.. y para poder desencriptarlo se debería utilizar el mismo diccionario para revertir el proceso. Pero si el diccionario cae en manos de alguien que no queremos que lo sepa, entonces estamos en peligro. Cuando yo programaba en pascal, mi encriptación favorita era invirtiendo los bits... pero cualquiera también puede invertir los bits y listo. Pero ya gente experta logró algoritmos de encriptación populares. Los más conocidos: MD5 y SHA. En este post hablaremos cómo encriptar texto, sobretodo las contraseñas, utilizando MD5 o SHA.

MD5 en Java (2)

Este realmente me pareció el más óptimo para crear un resumen MD5. Lo encontré en www.gravatar.com . 1 import java.io.UnsupportedEncodingException; 2 import java.security.MessageDigest; 3 import java.security.NoSuchAlgorithmException; 4 5 public class MD5Util { 6 7 public static String hex( byte [] array) { 8 StringBuffer sb = new StringBuffer(); 9 for ( int i = 0; i < array.length; ++i) { 10 sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); 11 } 12 return sb.toString(); 13 } 14 15 public static String md5Hex(String message) { 16 try { 17 MessageDigest md = 18 MessageDigest.getInstance( " MD5 " ); 19 return hex(md.digest(message.getBytes( " CP1252 " ))); 20 } catch (NoSuchAlgorithmException e) { 21 } catch (UnsupportedEncodingException e) { 22 } 23 ...

MD5 en Java

Estaba buscando en la red alguna función que permitira encriptar cadenas a MD5. Encontré de todo tipo. Pero el que pasó la prueba de rigor fue este ejemplo: http://paquesepas.wordpress.com/2008/07/09/md5-hexadecimal-hashing-en-java/ En resumen, el código final es este: private static final char [] HEXADECIMAL = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' } ; public String hash ( String stringToHash ) { try { MessageDigest md = MessageDigest.getInstance ( "MD5" ) ; byte [] bytes = md.digest ( stringToHash.getBytes ()) ; StringBuilder sb = new StringBuilder ( 2 * bytes.length ) ; for ( int i = 0 ; i < bytes.length; i++ ) { int low = ( int )( bytes [ i ] & 0x0f ) ; int high = ( int )(( bytes [ i...

Autenticación con LDAP en ActiveDirectory

Imagen
ActiveDirectory es un servicio de Windows Server que mantiene información de la red tales como los usuarios registrados, los equipos conectados, etc. Soporta el protocolo LDAP, por lo que este consistirá en hacer una simple clase que permita autenticar un usuario y una contraseña utilizando el ActiveDirectory. Si estamos haciendo una aplicación que necesite un inicio de sesión, convendría mejor que el usuario usara el mismo nombre de usuario y contraseña que utiliza cuando trabaja en red. Un ejemplo simple de autenticación con LDAP se encuentra aquí LDAP Autentication . Obteniendo la configuración del dominio de red En una red windows existe el servidor que contiene toda la información de la red. Este se llama "Servidor de Dominio". Debemos consultar con nuestro administrador de red cuál es el nombre de este equipo para hacer nuestra aplicación. Para nuestro ejemplo, nuestro servidor de red se llamará spdom01 . Necesitamos, además, saber cuáles son las cadenas de utiliza ...

Desplegando un .war en tomcat5.5 sobre ubuntu

Cuando ejecutaba el tomcat 5.5 sobre Ubuntu, de manera local (desde el usuario) las aplicaciones se ejecutaban correctamente. Pero cuando quería correrlo desde un demonio como parte del sistema, siempre mandaba un error de seguridad. Después de revisar por ahí, encontré que el ubuntu pone algunas seguridades sobre las acciones desde el tomcat. Edité este archivo /etc/tomcat5.5/policy.d/50user.policy y agregué lo siguiente: grant codeBase "file:/var/lib/tomcat5.5/webapps/ mi-aplicacion-web /-" { permission java.security.AllPermission; permission java.net.SocketPermission "127.0.0.1:3306", "connect,resolve"; permission java.net.SocketPermission "*.noaa.gov:80", "connect"; permission java.io.FilePermission "/var/lib/tomcat5.5/webapps/ mi-aplicacion-web /WEB-INF/logs-", "read,write,delete"; }; ... y vaya que resultó

Realm con ActiveDirectory

Después de revisar varios ejemplos, probar y probar, logré encontrar una configuración para usar Realm con el ActiveDirectory de Windows. Esta es la configuración que usé: <Context path="/ldap" > <Realm className="org.apache.catalina.realm.JNDIRealm" connectionURL="ldap://med_spdom01" debug="99" userPattern="{0}@meduca.gob.pe" roleBase="OU=Politicas,DC=meduca,DC=gob,DC=pe" roleName="cn"/> </Context> Como se ve en userPattern, le estoy poniendo el dominio del usuario. Primero había probado logearme con ese formato en la ventana de inicio de sesión del windows. Al momento de escribir el árroba (@) en el nombre de usuario, la lista de dominios se me desactiva. Ya no hacía falta especificar el dominio. Con esa premisa fue que intenté utilizar el mismo formato para el Realm en el Tomcat

Authenticacion Web con JSP/Servlet

Yo creía que la authentication tipo Realm era únicamente en la configuración del contenedor, // para ver si se autenticó String auth = request . getHeader ( "Authorization" ); //si no se autenticó... if (auth == null ) { //... responder al cliente que no está autorizado... response . setStatus ( response . SC_UNAUTHORIZED ); //... y pedir que se autentique. response . setHeader ( "WWW-Authenticate" , "Basic realm=\"Esbas\"" ); } else { // si se auténtico.. //obtenemos el par usuario/contrasenia encriptada //... pero se antepone la palbra Basic String cad = auth.substring( 6 ).trim(); //.. la clave está encriptada en BASE64.. sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder(); //... asi que lo decodificaremos String clave = new String(decoder.decodeBuffer(cad)); //.. ...