Seguridad · 7 min read · Jan 06, 2026

Prevenir el Phishing con Autenticación Mutua

Prevenir el Phishing con Autenticación Mutua

El phishing es esencialmente un ataque de intermediario. El usuario es desviado, por ejemplo, por ingeniería social o envenenamiento de caché DNS, a un sitio fraudulento. Debido a que el usuario no entiende cómo validar los certificados SSL (¿y quién lo hace?), el truco funciona con demasiada frecuencia. Esfuerzos como los certificados de Validación Extendida están destinados a fallar en muchos casos porque dependen de ayudas visuales inconsistentes y no de criptografía fuerte. Las contraseñas de un solo uso por sí solas también han demostrado ser vulnerables a ataques MITM en tiempo real. Prevenir el phishing de manera consistente requiere una fuerte autenticación mutua: validar el host para el usuario y el usuario para el host.

En este documento, configuraremos una aplicación JSP para trabajar con el sistema de contraseña de un solo uso y autenticación mutua de código abierto de WiKID. Así es como funcionará: cuando un usuario quiera iniciar sesión en el sitio objetivo, inicia el cliente de token de WiKID e ingresa su PIN. El PIN es encriptado por la clave pública del servidor y enviado al servidor. Si el PIN es correcto, la encriptación válida y la cuenta activa, se envía un paquete del OTP, la URL del sitio objetivo y un hash del certificado SSL del sitio objetivo al cliente de token. El cliente de token sale a través de la conexión a Internet del usuario a la URL del sitio objetivo y obtiene el certificado SSL, lo hash y lo compara con el hash del certificado validado. Si los dos hashes coinciden, el cliente de token presenta el OTP y (en plataformas compatibles) lanza el navegador predeterminado al sitio para el usuario.

Primero, agregaremos un dominio en el servidor WiKID para la aplicación, luego crearemos un cliente de red para la página JSP. Agregaremos el código de inicio de sesión para WiKID a la página JSP, luego lo probaremos desde un cliente de token.

Agregar un dominio al servidor WiKID

Esto es bastante fácil. Desde la interfaz de administración web del servidor WiKID, haga clic en la pestaña Dominios y Crear Nuevo Dominio. Ingrese un nombre de dominio para la puerta de enlace y un nombre de dispositivo. El nombre del dispositivo aparecerá en el token de WiKID. En el cuadro de URL Registrada, coloque la URL de la página JSP para el servidor objetivo. Cuando se crea el dominio, el servidor WiKID obtendrá el certificado del servidor web, así que asegúrese de ingresar ‘https:’. El código del servidor será la dirección IP enrutada, con ceros a la izquierda del servidor WiKID (por ejemplo, 10.1.1.1 = 010001001001). Establezca los otros parámetros como considere conveniente. Si bien un PIN más largo puede aumentar la seguridad matemáticamente, un PIN de cuatro dígitos puede ser mejor: si un usuario utiliza su PIN de cajero automático, es más probable que lo proteja.

Crear dominio de Autenticación Mutua

Crear un cliente de red

Después de guardar la información del dominio, haga clic en la pestaña Cliente de Red y Crear Nuevo Cliente de Red. Ingrese un nombre para este cliente y la dirección IP del servidor objetivo en la red interna. Seleccione wAuth como protocolo y luego elija el dominio que creó anteriormente.

Crear NC de Autenticación Mutua

Haga clic en Agregar para obtener la siguiente página e ingrese la información para el certificado p12 del servidor objetivo. Las comunicaciones entre el servidor JSP y el servidor WiKID estarán encriptadas con SSL utilizando este archivo p12. Ingrese una frase de contraseña para este archivo p12 dos veces y la frase de contraseña que utilizó para el certificado del servidor durante el proceso de configuración. Cuando regrese a la página Cliente de Red, verá el nuevo cliente de red listado y un enlace para descargar el archivo p12. Descargue el archivo p12 y colóquelo en su servidor JSP en el mismo directorio que su código JSP.

Crear NC de Autenticación Mutua_p12

Configurando sus páginas JSP

En su servidor JSP, necesita el archivo p12 creado en el servidor WiKID, el archivo jar del cliente de red de WiKID (Wikid.jar), que está disponible en nuestro sitio web o en nuestro sitio de Sourceforge, y su página JSP. Además, necesita estar ejecutando Java versión 1.4.2_06 o posterior. Cada paquete de cliente de red incluye una página de ejemplo. Aquí, editaremos la página example.jsp. Esta página también incluye código para agregar nuevos usuarios programáticamente.

Abra su página JSP en su editor favorito:

Primero, importe el cliente WiKID:

<%@ page contentType="text/html; charset=UTF-8" %>   
<%@ page import="com.wikidsystems.client.*" %> 

Esta sección instancia la conexión entre la aplicación cliente de red y el servidor WiKID. Para que esto tenga éxito, el cliente de red debe haber recibido un certificado del servidor WiKID. El certificado está contenido dentro de un almacén de certificados PKCS12 y requiere una frase de contraseña para acceder. El caStore es un almacén de claves de Java que contiene los certificados de los servidores WiKID a los que se conectará con este cliente. Puede copiar esto de WAS como /opt/WiKID/private/CACertStore. La caStorePass es la frase de contraseña para abrir el caStore.

Cuando se instancia el objeto wClient, cargará el certificado y establecerá una conexión SSL autenticada persistente. Esto normalmente se hace una vez por servidor o aplicación y se comparte entre múltiples hilos. En este ejemplo, el objeto se crea y destruye en cada solicitud de página. Esto aumenta enormemente (1000 veces) la sobrecarga del proceso, pero permite que todas las funciones se muestren en esta única página de ejemplo.

Los parámetros son:

  • wClient(String host, int port, String keyfile, String pass)
  • host = dirección IP del servidor WIKID
  • port = número de puerto TCP para conectarse (por defecto 8388)
  • keyfile = Ruta al archivo de certificado PKCS12
  • pass = Frase de contraseña para abrir el archivo PKCS12
  • caStore - El almacén de autoridad de certificación para validar el certificado del servidor WAS, descárguelo del servidor WiKID (opt/WiKID/private/CACertStore <– NO USE el archivo cacerts de Java
  • caStorePass - La frase de contraseña que asegura el archivo caStore
<%  String status="";  
    String chall="";        
wClient wc = new wClient("192.168.0.1",   
    8388,   
    "/opt/tomcat/webapps/example/Token_test_client.p12",   
    "yourpassphrase",        
    "/opt/tomcat/webapps/example/CACertStore",   
    "yourpassphrase");    
%> 

Inicio de Sesión en Línea

Esta función es el inicio de sesión en estado normal para los usuarios. Se llama cuando el dispositivo de los usuarios está conectado a la red y puede solicitar directamente un código de acceso.

Los parámetros son:

  • CheckCredentials(String user, String passcode, String servercode)
  • user = id de usuario para validar credenciales
  • passcode = código de acceso de un solo uso limitado en el tiempo
  • servercode = código de 12 dígitos creado en el servidor WiKID, en este caso 333344445555

Este método devuelve un booleano que representa la autenticación exitosa o fallida

<%   
boolean isValid = false;      
 if(request.getParameter("action") != null && request.getParameter("action").equalsIgnoreCase("Check Online")){  
 isValid = wc.CheckCredentials(request.getParameter("user"), request.getParameter("passcode"), request.getParameter("servercode"));             
   if (isValid){                  
     status="Success";             
   } else {               
     status="Autenticación Fallida";             
   }   
 }   
%> 

Y aquí está el HTML para el formulario:


  
 

Inicio de Sesión en Línea:

UserID:
Passcode:
Código de dominio:


Pruebas con el Cliente de Token

Si aún no lo ha hecho, puede descargar una copia del cliente de token de código abierto de WiKID. Inicie el token con ‘run.sh’ o ‘run.bat’ dependiendo de su plataforma. La primera vez que inicie el cliente de token, necesitará crear una frase de contraseña. Una vez iniciado, seleccione Acciones y Crear Nuevo Dominio

Token de Autenticación Mutua - Agregar dominio

Ingrese el identificador de dominio de 12 dígitos y la clave pública se enviará al servidor WiKID. Se le pedirá una PIN.

Token de Autenticación Mutua - Ingrese PIN

El servidor WiKID almacenará el PIN y devolverá un código de registro.

Token de Autenticación Mutua - código de registro

En este punto, la cuenta ha sido creada en el servidor WiKID, pero no está activa. Puede crear páginas de registro de autoservicio para usuarios basadas en credenciales confiables existentes o mecanismos fuera de banda, pero en este caso, validaremos manualmente al usuario en el servidor WiKID. Desde la interfaz web de WiKIDAdmin, haga clic en Usuarios y Validar Manualmente a un Usuario. Haga clic en el Código de Registro e ingrese un nombre de usuario.

Token de Autenticación Mutua - validar

Ahora, desde el cliente de token, seleccione el dominio que creó e ingrese su PIN. Debería recibir el código de acceso de un solo uso (y debería ser copiado en su portapapeles) y su navegador debería lanzarse a la URL Registrada.

Al combinar códigos de acceso de un solo uso para la autenticación de usuarios con la validación incorporada del certificado del host y el lanzamiento automático del navegador, hemos creado un sistema que es fácil para el usuario, pero criptográficamente sólido. El cliente de token es capaz de manejar múltiples relaciones de dominio sin una reducción de seguridad gracias al uso de criptografía de clave pública y el servidor es capaz de gestionar múltiples relaciones de clientes de red. Ejemplos adicionales de clientes de red están disponibles para Ruby, PHP, Python y ASP/COM/.NET. Apache o IIS también se pueden configurar utilizando Radius o LDAP.

Puede probar este proceso (anónimamente) en http://www.wikidsystems.com/signup/example.jsp

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.