2012-09-25 14 views
10

En una entrevista, el entrevistador me preguntó por qué necesita credenciales privadas en JAAS?
podemos acceder tanto credenciales públicas y privadas como credenciales:Uso de credenciales privadas y públicas en JAAS

Set<Object> privateCredentials = subject.getPrivateCredentials(); 
Set<Object> publicCredentials = subject.getPublicCredentials(); 

Ambos (privateCredentials y publicCredentials) son accesibles, y el camino de acceso son los mismos.
Entonces, ¿cuál es la importancia para los tipos de credenciales de arrastre?

+0

¿Es esta una pregunta general sobre el papel de la criptografía de claves privadas en PKI? – Alex

Respuesta

6

De "Java e Internet Security" libro de Theodore Shrader, Bruce A. Rich, Anthony J. Nadalin:

Con un poco más controversia, los diseñadores JAAS la conclusión de que los directores pueden tener algún tipo de prueba de identidad que deben poder proporcionar en un momento dado, y estas pruebas de identidad pueden incluir información confidencial, por lo que también se agregaron un conjunto de credenciales públicas y un conjunto de credenciales privadas al Sujeto. Como el contenido de una credencial puede variar ampliamente entre los mecanismos de autenticación, desde una contraseña simple hasta una huella digital (hasta la infinita y más allá), el tipo de credencial simplemente se dejó como java.lang.Obiect. Las relaciones entre los Directores y las credenciales, si existieron, se dejaron como un ejercicio para el implementador de la clase de Principal particular (o más probablemente, la clase de LoginModule particular). Desde la perspectiva de JAAS, la única diferencia entre las credenciales privadas y públicas es que se necesita una javax.security.auth.AuthPermission particular para acceder al conjunto de credenciales privadas.

1

Desde el JAAS Reference Guide:

Para iterar a través de un conjunto de credenciales privadas, se necesita un javax.security.auth.PrivateCredentialPermission acceder a cada credencial. Consulte la documentación de la API PrivateCredentialPermission para obtener más información.

+0

¿Por qué se bajó este valor? Es la más concisa de todas las respuestas aquí, AFAICS. También es perfectamente sensato: se puede restringir el acceso a las credenciales privadas, lo que parece ser su objetivo. – fgp

+3

No he votado negativamente, pero esto no responde la pregunta. Él no está preguntando sobre la API y los permisos, él está preguntando por qué necesitamos credenciales privadas en JAAS en absoluto. – EJP

0

De mi comprensión de JAAS (y más comprensión de los principios de diseño de SW general)
un sujeto es una entidad representa una fuente de petición, por ejemplo un usuario, y desde JAAS se trata de proporcionar una API abstracto para diversas mecanismos de autorización/autenticación, también puede ver el tema como un tipo de abstracción.

Estoy usando JAAS con Krb5LoginModule y, por ejemplo, en nuestro caso, el principal representa los detalles del usuario (nombre de usuario + dominio, es decir, "[email protected]").
El usuario puede tener un conjunto de credenciales privadas y públicas en función del mecanismo criptográfico subyacente (espero estar usando un término correcto aquí); por ejemplo, si se utiliza la criptografía de clave asimétrica, puede usar getPublicCrendetials para obtener información sobre las claves públicas.
getPrivateCredentials contendrá un conjunto de claves privadas, y es probable que necesite privilegios para obtener esa lista.
Aunque nunca lo intenté antes, ¿quizás puede usar los getPrivateCredentials para obtener una clave privada y usarla para la firma digital?

Puedo decirle que utilicé estos métodos para obtener el vale de Kerberos y obtener información sobre su validez (tiempo de vencimiento). Espero que esto le haya dado más idea sobre por qué se hizo esta división.

1

Bueno, realmente no necesita en absoluto en general.Tengo un sistema JAAS bastante grande con aproximadamente 7 LoginModules y no uso credenciales privadas en absoluto. Los usaría si, por ejemplo, quisiera almacenar la contraseña del usuario o la clave privada para su recuperación por otras partes del sistema, pero no hay nada intrínseco en la necesidad de hacerlo, depende totalmente de cómo diseñe su sistema. Mi actitud es que la contraseña está en LDAP y ahí es donde permanece, y no tengo usuarios con claves privadas.

Sin embargo, cuando hacen los necesita, necesita que estén separados de las credenciales públicas, porque son privados, no públicos, ¿no? y, de hecho, pueden protegerse aún más requiriendo PrivateCredentialPermissions para acceder a ellos.

0

Las credenciales públicas pueden exponerse libremente y transmitirse sobre el tema. Ejemplos:

  • certificado
  • clave

credenciales públicas privadas son secretos. Dado que los objetos de Subject pueden tener una gran audiencia, estos deben estar ocultos para el acceso de "outsiders". La API proporciona restricciones para acceder a las credenciales privadas de un Asunto, que se detallan en otras respuestas. Ejemplos:

  • contraseña
  • clave privada
Cuestiones relacionadas