que - socket en c++ cliente servidor linux
¿Cómo usar gssapi kerberos en los programas multiplataforma del servidor cliente c/c++? (0)
Tuve que trabajar "esporádicamente" con Heimdal / MIT Gssapi para la autenticación Kerberos en los últimos años. Tuve que crear una aplicación que se iba a utilizar como un servicio web que se ejecuta en una caja de Linux y servir aplicaciones de clientes como navegadores, que se ejecutan en computadoras de escritorio y estaciones de trabajo Windows y / o Linux. Seguramente no es la bestia más fácil de domesticar. Eventualmente, al resumir mi trabajo, pude registrar que las dificultades surgieron debido a desafíos en múltiples dimensiones. Comenzar con la programación de gssapi es realmente un desafío solo por la escasa documentación y los tutoriales prácticamente inexistentes. La búsqueda de Google en su mayoría da como resultado una discusión teórica sobre qué es kerberos, o lleva al contenido escrito con la presunción de que ya sabes todo además de algún tema semántico particular. Algunos hacks realmente buenos por aquí contribuyeron a ayudarme, por lo tanto, supongo que sería una buena idea resumir las cosas, desde la perspectiva de un desarrollador, y compartirlas aquí como una especie de wiki, para devolver algo a este fantástico lugar, y compañeros programadores.
Realmente no he hecho una wiki como esta antes, y ciertamente no soy una autoridad en GSSAPI ni Kerberos, así que sean amables, pero más que eso contribuyan y corrijan mis errores. Editores del sitio, cuento con usted para hacer su magia;)
Para que su proyecto se complete con éxito, se requieren tres cosas específicas que se deben realizar correctamente:
- Configuración de su entorno de prueba
- Configuración de tus bibliotecas
- Tu codigo
Como ya dije, tales proyectos son bestias, simplemente porque los tres no se han reunido en la misma página en ninguna parte.
Ok, comencemos por el principio.
Teoría inevitable para un novato GSSAPI ayuda a una aplicación cliente a proporcionar credenciales para que un servidor identifique autoritariamente al usuario. Extremadamente útil porque las aplicaciones del servidor pueden modular sus respuestas servidas si así lo desean, según el usuario. Por lo tanto, es muy natural que ambas: las aplicaciones del cliente y del servidor deben estar kerberizadas o, como algunos, indicar kerberos-aware.
La autenticación basada en kerberos requiere que las aplicaciones cliente y servidor sean miembros de un reino de Kerberos. KDC (Kerberos Domain Controller) es la autoridad designada que gobierna el reino. Los servidores AD de Microsoft son uno de los ejemplos más populares de KDC, aunque puede usar un KDC basado en * NIX. Pero seguramente sin un KDC no puede haber ningún negocio Kerberos en absoluto. Los equipos de escritorio, servidores y estaciones de trabajo unidos al dominio se identifican entre sí, siempre y cuando todos permanezcan unidos al dominio.
Para sus experimentos iniciales, configure las aplicaciones cliente y servidor en el mismo reino. Aunque la Autenticación de Kerberos seguramente también se puede utilizar en todos los ámbitos creando confianzas entre KDC de estos reinos, o incluso combinando keytabs de diferentes KDC que no confían entre sí. Su código realmente no necesitará ningún cambio para acomodar escenarios tan diferentes y complejos.
Autenticación Kerberos básicamente funciona a través de "tickets (o tokens)". Cuando un miembro se une al reino, el KDC "otorga tokens" a cada uno de ellos. Estos tokens son únicos; el tiempo y el FQDN son factores esenciales para estas entradas.
Antes de siquiera pensar en la primera línea de su código, asegúrese de tener estos dos derechos:
Pitfall # 1 Cuando configura su entorno de desarrollo y prueba, asegúrese de que todo se prueba y se trata como FQDN. Por ejemplo, si desea verificar la conectividad, haga ping con FQDN, no con IP. No hace falta decir, por lo tanto, que necesariamente deben tener la misma configuración de servicio DNS.
Pitfall # 2 Asegúrese de que todos los sistemas host que ejecutan su KDC, software de cliente y software de servidor tengan el mismo servidor horario. La sincronización de tiempo es algo que uno olvida, y se da cuenta de que está mal después de una gran cantidad de pelos y golpes de cabeza!
Tanto las aplicaciones de cliente como las de servidor NECESITAN clave clave de Kerberos. Entonces, si su aplicación se va a ejecutar en un host * NIX y forma parte de un dominio de Microsoft, debe obtener una clave de kerberos generada antes de comenzar a observar los pasos preparatorios restantes para la programación de gss.
Guía paso a paso para Kerberos 5 (krb5 1.0) La interoperabilidad en es una lectura obligada absoluta.
La Guía de programación GSS-API es un excelente marcador.
Dependiendo de su distribución * NIX, puede instalar los encabezados y bibliotecas para construir su código. Mi sugerencia, sin embargo, es descargar la fuente y compilarla usted mismo. Sí, puede que no lo hagas bien de una vez, pero seguramente vale la pena.
Pitfall # 3 Asegúrese de que su aplicación se esté ejecutando en un entorno compatible con Kerberos. Realmente aprendí esto de la manera difícil, pero tal vez porque no soy tan inteligente. En mis primeras etapas de la lucha de programación de gssapi, descubrí que las claves de acceso de kerberos eran absolutamente necesarias para hacer que mi aplicación fuera consciente de kerberos. Pero simplemente no pude encontrar nada sobre cómo cargar estos keytabs en mi aplicación. ¡¡¿Sabes por qué?!! ¡Porque no existe tal api! Porque: la aplicación debe ejecutarse en un entorno que tenga en cuenta las tablas de claves. Ok, permítanme hacer esto simple: su aplicación que se supone que hace las cosas GSSAPI / Kerberos tiene que ejecutarse después de que haya establecido la variable de entorno KRB5_KTNAME
en la ruta donde ha almacenado las tablas de claves. Entonces, o bien haces algo como:
export KRB5_KTNAME=<path/to/your/keytab>
o haga uso de setenv
para configurar KRB5_KTNAME
en su aplicación lo suficiente antes de ejecutar la primera línea de su código que usa gssapi.
Ahora estamos listos para hacer las cosas necesarias en el código de la aplicación.
Entiendo que hay muchos otros aspectos que debe revisar el desarrollador de la aplicación para escribir y probar una aplicación. Conozco algunas variables de entorno, que pueden ser importantes.
¿Alguien puede por favor arrojar más luz sobre eso?