Servicio web de reposo con solicitudes firmadas en Java

1

Actualmente estoy implementando un servicio web de descanso con Spring + Java + Tomcat y un cliente cmd para acceder a él. El requisito más importante es restringir el uso a usuarios autenticados; el cifrado no es tan importante.

Como no puedo garantizar que se acceda al servicio a través de TLS, no puedo usar la autenticación básica con nombre de usuario y contraseña.

Mi idea es hacer lo siguiente:

  1. Obtenga una licencia del servicio web, que se modifica después de cada solicitud
  2. Calcular una firma con DSA de (request + nonce)
  3. Agregue la firma al encabezado HTTP y verifíquelo en el servicio web

Cómo crearía la firma:

// To generate the keys
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);
KeyPair pair = keyGen.generateKeyPair();

// Per request
Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
dsa.initSign(pair.getPrivate);
dsa.update(...)
byte[] signature = dsa.sign();

Para comprobar la firma:

Signature sig = Signature.getInstance("SHA1withDSA", "SUN");
sig.initVerify(pubKey);
sig.update(...)
boolean ok = sig.verify(sigToVerify);

Escuché mucho sobre no implementar tu propia seguridad, por lo que me gustaría saber si otras personas ven algo que yo no.

¿Alguien ve un problema importante con este enfoque?

    
pregunta Peter Clause 10.02.2015 - 11:03
fuente

1 respuesta

0

Primero, el nonce que obtiene del servicio web debe ser criptográficamente seguro (impredecible) y se debe usar solo una vez para evitar los ataques de repetición.

Entonces, no hay nada de malo en este enfoque, tan pronto como el servicio web almacena la clave pública del cliente y puede verificar su autenticidad.

Además, un inconveniente a considerar, es el costo de rendimiento de la verificación de la firma. (Consulte: Datos estadísticos sobre el rendimiento de varios algoritmos de cifrado )

    
respondido por el fmgp 10.02.2015 - 12:22
fuente

Lea otras preguntas en las etiquetas