La autenticación SCRAM es una de las novedades de la versión 4.5. Consulte esta entrada del blog para una introducción sobre SCRAM en Couchbase.
En este artículo veremos cómo monitorizar el handshake SCRAM desde Java.
Primero, no tienes que hacer nada especial desde tu código Java para usar SCRAM. SCRAM está activado por defecto, y se utilizará si tu versión de Java SDK es 2.2.5 o superior y tu versión de Couchbase Server es 4.5 o superior.
SCRAM se utilizará cuando abras un cubo con contraseña.
Para monitorizar la autenticación SCRAM desde su código Java, simplemente establezca su nivel de depuración a FINEST:
1 2 3 4 5 6 7 8 9 |
Registrador registrador = Registrador.getLogger("com.couchbase.client"); registrador.setLevel(Nivel.FINEST); para(Manipulador h : registrador.getParent().getHandlers()) { si(h instanceof ConsoleHandler){ h.setLevel(Nivel.FINEST); } } } |
Ahora, en algún punto de tu código accedes al cubo:
1 2 |
CouchbaseCluster.crear("_dirección_del_cluster").openBucket(cubo, contraseña); |
Ahora puedes ver la conversación de autenticación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Mayo 19, 2016 12:23:45 PM com.couchbase.cliente.deps.io.red.manipulador.registro.LoggingHandler logMessage FINEST: [id: 0x7af6f756, L:/127.0.0.1:51766 - R:localhost/127.0.0.1:11210] RECIBIDO: 75B +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 81 20 00 00 00 00 00 00 00 00 00 33 00 00 00 00 |. .........3....| |00000010| 00 00 00 00 00 00 00 00 53 43 52 41 4d 2d 53 48 |........SCRAM-SH| |00000020| 41 35 31 32 20 53 43 52 41 4d 2d 53 48 41 32 35 |A512 SCRAM-SHA25| |00000030| 36 20 53 43 52 41 4d 2d 53 48 41 31 20 43 52 41 |6 SCRAM-SHA1 CRA| |00000040| 4d 2d 4d 44 35 20 50 4c 41 49 4e |M-MD5 PLANO | +--------+-------------------------------------------------+----------------+ Mayo 19, 2016 12:23:45 PM com.couchbase.cliente.deps.io.red.manipulador.registro.LoggingHandler logMessage FINEST: [id: 0x7af6f756, L:/127.0.0.1:51766 - R:localhost/127.0.0.1:11210] ESCRIBIR: 36B +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 80 21 00 0c 00 00 00 00 00 00 00 33 00 00 00 00 |.!.........3....| |00000010| 00 00 00 00 00 00 00 00 53 43 52 41 4d 2d 53 48 |........SCRAM-SH| |00000020| 41 35 31 32 |A512 | +--------+-------------------------------------------------+----------------+ |
Mostramos aquí sólo los pasos en los que el servidor informa sobre el método de autenticación soportado y el cliente elige el más fuerte. En este handshake el servidor soporta:
- SCRAM-SHA512
- SCRAM-SHA256
- SCRAM-SHA1
- CRAM-MD5 LISO
Y el cliente elige el más fuerte: SCRAM-SHA512
El mismo código ejecutado contra Couchbase 4.1 produce este resultado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Mayo 20, 2016 12:05:54 AM com.couchbase.cliente.deps.io.red.manipulador.registro.LoggingHandler logMessage FINEST: [id: 0x7a2764f3, L:/192.168.56.1:52201 - R:oracle2couchbase/192.168.56.101:11210] RECIBIDO: 38B +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 81 20 00 00 00 00 00 00 00 00 00 0e 00 00 00 00 |. ..............| |00000010| 00 00 00 00 00 00 00 00 43 52 41 4d 2d 4d 44 35 |........CRAM-MD5| |00000020| 20 50 4c 41 49 4e | PLANO | +--------+-------------------------------------------------+----------------+ Mayo 20, 2016 12:05:54 AM com.couchbase.cliente.deps.io.red.manipulador.registro.LoggingHandler logMessage FINEST: [id: 0x7a2764f3, L:/192.168.56.1:52201 - R:oracle2couchbase/192.168.56.101:11210] ESCRIBIR: 32B +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 80 21 00 08 00 00 00 00 00 00 00 08 00 00 00 00 |.!..............| |00000010| 00 00 00 00 00 00 00 00 43 52 41 4d 2d 4d 44 35 |........CRAM-MD5| +--------+-------------------------------------------------+----------------+ |
Aquí puede ver cómo se selecciona CRAM-MD5.
También puedes monitorizar la autenticación olfateando el tráfico de red. Una gran herramienta para esta tarea es wireshark. Puedes coger tráfico y luego filtrar por protocolo "Couchbase":
Para terminar, probablemente te habrás dado cuenta de lo fácil que es monitorizar el handshake de autenticación, por eso recomendamos usar TLS en tu autenticación cliente-servidor.
De este modo, se evita un ataque de tipo "hombre en el medio", ya que SCRAM utiliza la autenticación mutua y el servidor debe responder a un desafío para demostrar que conoce el "secreto" basado en la contraseña hash del cliente.
¡Feliz autentificación!