Rest WebService con richieste firmate in Java

1

Attualmente sto implementando un servizio web di riposo con Spring + Java + Tomcat e un client cmd per accedervi. Il requisito più importante è limitare l'utilizzo agli utenti autenticati: la crittografia non è così importante.

Poiché non posso garantire che il servizio sia accessibile tramite TLS, non posso utilizzare l'autenticazione di base con nome utente e password.

La mia idea è di fare quanto segue:

  1. Ottieni un nonce dal servizio web - che è cambiato dopo ogni richiesta
  2. Calcola una firma con DSA di (richiesta + nonce)
  3. Aggiungi firma all'intestazione HTTP e controllala nel servizio web

Come creerei 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();

Per verificare la firma:

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

Ho sentito tanto parlare di non implementare la tua sicurezza, ed è per questo che vorrei sapere se altre persone vedono qualcosa che non conosco.

Qualcuno vede un grosso problema con questo approccio?

    
posta Peter Clause 10.02.2015 - 11:03
fonte

1 risposta

0

Innanzitutto, il nonce ottenuto dal servizio web deve essere crittograficamente sicuro (imprevedibile) e utilizzato una sola volta per evitare attacchi di riproduzione.

Quindi, non c'è nulla di sbagliato in questo approccio, non appena il servizio Web memorizza la chiave pubblica dal client ed è in grado di verificarne l'autenticità.

Inoltre, un aspetto negativo da considerare è il costo delle prestazioni di verifica della firma. (vedi: Dati statistici sulle prestazioni di vari algoritmi di crittografia )

    
risposta data 10.02.2015 - 12:22
fonte

Leggi altre domande sui tag