jueves, 2 de mayo de 2013

Certificados

Una cuestión que me ha llegado al buzón sobre este tema requería esta explicación. Me ha parecido interesante compartirla.

Cuando tenemos un Server instalado en Mountain Lion (es el caso concreto del que estamos hablando pero estoy seguro de que esto es extrapolable a otras versiones o sistemas), es más que probable que vayamos a proporcionar servicios a usuarios. En el caso que contemplamos, se trataría de servicios a múltiples usuarios que no van a acceder a la máquina de manera local y servicios cuya comunicación querremos proteger.

Punto por punto

Tras instalar el servidor, tendremos que decidir qué servicios queremos proporcionar. Si vamos a trabajar con múltiples usuarios, una opción más que interesante es la de activar el servicio de Open Directory para gestionar las cuentas de usuarios. Podríamos utilizar los usuarios locales de la máquina como usuarios "de red" y trabajar con ellos. Pero dependiendo de la complejidad de la estructura de usuarios que queramos montar podría ser desaconsejable. Por ejemplo, el Open Directory me va a permitir la gestión de perfiles de configuración para máquinas o grupos de máquinas.

En general, un servicio que queramos proteger, utilizará un certificado. Este certificado, si lo generamos directamente será un certificado autofirmado. Si queremos que se use ese certificado para proteger la comunicación con un servicio, el usuario final debe confiar en el servicio. Nuevamente dependiendo del número de usuarios esto será un proceso más sencillo o más complejo. Por ejemplo, si simplemente utilizamos los servicios como algo personal (correo, compartir archivos...) en nuestros equipos, podemos configurarlos manualmente para que confíen en el certificado.

Si, por el contrario, queremos trabajar con más usuarios y, o bien no tienen el conocimiento necesario para configurar los certificados como confiables o bien son demasiados, podemos hacer dos cosas.

La primera sería hacer que nuestros certificados fueran confiables de serie. Para eso hemos de recurrir a una entidad certificadora (raiz o intermedia) que garantice la confiabilidad de nuestro certificado. Eso puede costar dinero.

La segunda sería generar un único certificado raiz propio que garantizara la procedencia del resto de nuestros certificados. Eso es gratis. Pero sigue teniendo el problema de que nuestros usuarios tienen que confiar en esa entidad certificadora propia (no confiable de serie).

Veo mucho "confiable" y "certificado" en los párrafos anteriores. Recapitulemos.

- Accedo a un servicio.
- La comunicación está protegida por un certificado.
- Si el certificado viene avalado por una entidad certificadora raíz (CA) en la que confío, la confianza es  heredada. Hay una cadena de confianza.
- Si no viene avalado por una entidad certificadora en la que confíe (puede ser autofirmado o firmado por una entidad certificadora que no conozca...) tendré que confiar en el de serie.

Ahora bien, si yo genero mi propia entidad certificadora, podré firmar tantos certificados como quiera y serán todos confiables... siempre y cuando confíe en la entidad certificadora.

¿Cómo creo mi propia entidad certificadora?

Desde OS X 10.8 Mountain Lion (no me miréis así, es lo primero que he dicho...) utilizando Acceso a Llaveros (maravillosa utilidad). Podemos utilizar Acceso a Llaveros/Asistente para Certificados/Crear una autoridad de certificación...

Para generar una CA propia.

¿Cómo creo certificados que vengan avalados por mi propio CA?

Dos pasos. Primero solicitamos un certificado de una autoridad de certificación utilizando Solicitar un certificado de una autoridad de certificación... (dos líneas más abajo en el menú que acabamos de utilizar). Guardamos la solicitud en el disco duro. Segundo, utilizamos la opción Crear un certificado para otra persona como autoridad de certificación... (justo encima de la última que hemos utilizado). Nos pedirá que arrastremos el archivo que hemos guardado en el paso anterior y que seleccionemos la CA que queremos.

EDIT: O bien, en lugar de complicarme tanto, puedo crear un certificado seleccionando Terminal como Tipo de Certificado. Aquí cabe notar que Terminal es la traducción que se ha dado a Leaf. Que significa hoja. Entiendo que esto se debe a la estructura de árbol donde el CA es el certificado raíz.

¿Cómo instalamos el certificado raíz CA para que sea confiable en el resto de máquinas?

Lo normal, en el caso del que estamos hablando, es que los dispositivos realicen un proceso de enrollmente en el MDM que proporcione las configuraciones de los servicios que estamos ofreciendo. Instalado el certificado raíz y confiando en este, el resto de certificados que utilicemos deberían ser confiables.

Conclusión

Esto no es fácil. La teoría es lo que hay, pero pueden fallar cosas. Por ejemplo, al activar el Open Directory se creará un CA automáticamente. Y si luego queremos cambiarlo puede resultar complicado.

Dudas

Después de escribir todo esto y revisar algunos conceptos me planteo algunas cosas.
- La entidad que se genera automáticamente (al menos la que veo en mi equipo) es una Intermediate CA. La que propongo es una CA Raíz.
- Se pueden crear certificados desde la aplicación de Server.