Cómo instalar certificados personales vía Directivas de Grupo
Es muy común (y cada día más) en las empresas los administradores de TI necesitamos instalar certificados personales a los usuarios, no sólo los suyos personales sino también los de la empresa. Muchas de las tramitaciones actuales se realizan de forma telemática, por lo tanto el usuario/s que realiza estas tramitaciones necesita tener instalado el certificado digital de la empresa. Hasta aquí todo normal, pero siempre nos surgen algunas dudas de como realizar la instalación de este tipo de certificados:
- ¿Podemos automatizar su instalación a los usuarios?
- ¿Podemos retirarlo cuando el usuario ya no lo necesite?
- ¿Puedo controlar que nadie lo pueda exportar con la clave privada?
- ¿Es seguro instalar el certificado a los usuarios?
- Etc..
Aquí van mis respuestas a dichas preguntas:
- Si, podemos instalar los certificados a través de las Directivas de Grupo
- Si, de la misma forma, vía Directivas de Grupo
- Si, puesto que en la importación del certificado no le marcamos que pueda ser exportable
- Si, puesto que ahora podemos instalar el certificado sin tener que introducir una contraseña, sino que por la pertenencia a un grupo de seguridad. Por lo tanto, sino pertenece al grupo de seguridad no podrá realizar la instalación del certificado. Además, en el script de PowerShell no tenemos que introducir la contraseña del certificado, porque como he comentado, se instala en base a la membresía del usuario.
También es muy común que los usuarios tengan un token de seguridad, en donde tengamos el certificado instalado, el usuario final saber el PIN del Token y podrá utilizar el certificado. Esto desde luego es una de las mejores soluciones, pero si tenemos 15 usuarios a los cuales tenemos que darle de forma temporal acceso al certificado … lo más cómodo es configurar por directivas de grupo que se les instale el certificado que necesiten. Además, en cuanto queramos que el usuario no tenga el certificado instalado, simplemente le aplicamos otra directiva que le elimina el certificado de su contenedor local de certificados de usuario.
Dicho esto, vamos a ver como podemos configurar esto que he comentado. Lo primero que tenemos que tener en cuenta es que debemos tener Windows 8 o superior y Windows Server 2012 o superior. Si este requisito lo cumplimos, sólo nos queda realizar las configuraciones oportunas.
Para esta laboratorio cuento con dos máquinas virtuales, con Windows 10 Pro y Windows Server 2016 respectivamente. Tengo un dominio creado y el Windows 10 está unido a él, además tengo un usuario para realizar todas las pruebas. El certificado que utilizaré será uno de ámbito privado, emitido por la CA que he configurado en mi servidor, pero esto sirve para cualquier certificado personal que queráis utilizar.
Como os comentaba, lo primero que haremos será exportar el certificado del usuario y le asignaremos un grupo de seguridad del AD habilitando el acceso a la clave privada, lo que les permitirá instalarse el certificado a los usuarios si son miembros de dicho grupo. Luego el certificado lo colocaré en una carpeta compartida, a la cual los usuarios deben tener acceso de lectura. Por último crearemos dos directivas de grupo, una les instalará los certificados y otra se los eliminará en base a los grupos de seguridad a los que pertenezcan.
Ahora paso a paso veamos cual sería el proceso completo, primero os expongo los grupos de seguridad que he utilizado para asignar diferentes ámbitos de seguridad en base al grupo:
- ACL CERT INSTALACION SBUITRAGO: Este grupo lo utilizaré para que sus miembros puedan realizar la instalación del certificado
- GPO PERMIT USR INSTALACION CERT SBUITRAGO: Este grupo permite aplicar una GPO a los usuarios que son miembros de dicho grupo
La estructura de carpetas y seguridad de las mismas utiliza otra serie de grupos, pero que al final únicamente permite que el usuario que pertenece al grupo ACL CERT INSTALACION SBUITRAGO tiene acceso a la carpeta raíz en donde estarían todos los certificados. Por anidación, hago que los usuarios que son miembros del grupo de seguridad para un certificado, se les aplique la GPO y tengan acceso a dicha carpeta. La carpeta es la siguiente y está publicada vía DFS:
\\ASIRLAB.COM\ASIRLAB\CERT
Los grupos de seguridad que tengo creados, como os comentaba ofrecen acceso de lectura a la carpeta CERT por anidación y de forma directa al PFX que hemos exportado. Entiendo que os habéis fijado, pero los nombres de los grupos están nombrados de forma que sea sencillo identificar cual es su finalidad: ACL CERT INSTALACION SBUITRAGO:
- ACL: Nos indica que es un grupo de seguridad: Access Control List
- CERT: Que será asignado a un Certificado
- INSTALACIÓN: Lo que se hará con él, aunque esto si queréis podemos omitirlo
- SBUITRAGO: Aquí defino el nombre de quien está el certificado, no la persona a quien se lo voy a instalar. Este certificado es de SANTIAGO BUITRAGO (SBUITRAGO), y así sabré identificar el certificado que quiero asignarle al usuario que lo necesite. Si tengo más certificados, pues crearía más grupos de seguridad y aquí pondría un nombre descriptivo que me permita reconocerlo, en mi caso es puesto mi LOGIN, pero vamos, podría ser lo que vosotros queráis.
Para aclarar un poco más este concepto, mostraré la ruta y los permisos que tendría:
- \\ASIRLAB.COM\ASIRLAB: Todos los usuarios pueden acceder a la carpeta raíz a la cual hace referencia la ruta DFS, puesto que habrá más carpetas luego por departamentos, etc.. por lo que un grupo de seguridad define la seguridad en esta raíz y accederá toda la empresa. El permiso que se aplica con este grupo es de Sólo lectura en esta carpeta, no afectando en las subcarpetas, puesto que el resto de carpetas tendrán sus grupos de seguridad específicos.
- \\ASIRLAB.COM\ASIRLAB\CERT: Otro grupo de seguridad definirá el acceso a la carpeta CERT, el cual a su vez es miembro del grupo que define la seguridad de la carpeta ASIRLAB
- \\ASIRLAB.COM\ASIRLAB\CERT\Certificado.PFX: Aquí es donde el grupo ACL CERT INSTALACION SBUITRAGO ya se aplica para definir el acceso de lectura sobre el mismo, además será miembro del grupo de seguridad definido en la ruta \\ASIRLAB.COM\ASIRLAB\CERT. De esta forma, cuando un usuario es miembro del grupo ACL CERT INSTALACION XXXX ya obtendrá acceso a \\ASIRLAB.COM\ASIRLAB\CERT
Gráficamente la anidación sería de la siguiente forma:
Como podéis observar, por membresía los usuarios tendrá acceso a la estructura que hemos planteado y cuando queramos que se retire el certificado instalado en su momento, únicamente tendremos que quitarlo del grupo de seguridad ACL CERT INSTALACION XXXXX y ya no tendría acceso a la ruta \\ASIRLAB.COM\ASIRLAB\CERT y por ende a ninguno de los certificados. Con el orden de las GPO, veremos como cuando un usuario ya no pertenece a ningún grupo ACL CERT INSTALACION XXXX se aplicará otra GPO que se aplica a todos los usuarios (usuarios autenticados) y eliminará el certificado asignado al usuario.
Ahora sí, veamos como podemos configurar dos GPOs con sus correspondientes scripts en PowerShell para desplegar de forma automática a los usuarios que queramos los distintos certificados. Lo primero será “configurar” el certificado que queremos instalar a los usuarios, así que lo exportaremos y aplicaremos la seguridad en función del grupo de Directorio Activo que hemos creado previamente (ACL CERT INSTALACION SBUITRAGO ):
Pulsamos en Siguiente
Importante, debemos seleccionar la opción de Exportar la clave privada
Aquí es donde tenemos que prestar atención, básicamente es habilitar la seguridad pero a nivel de Grupo o nombres de usuario (recomendado), y es donde agregaremos al grupo de seguridad creado previamente (ACL CERT INSTALACION SBUITRAGO). Por defecto en este momento, el sistema también le configura una contraseña de exportación, de forma aleatoria y con una longitud considerable (luego lo veremos):
Por último le damos una ruta en donde guardar el fichero exportado y pulsamos en Siguiente
Pulsamos en Finalizar y ya tenemos nuestro certificado exportado
Un dato que tenemos que recoger ahora, es la Huella Digital, puesto que será lo que utilicemos a posteriori para retirar el certificado del contenedor de certificados de usuario
Ahora copiaremos el certificado en la ruta que he creado antes (\\ASIRLAB.COM\ASIRLAB\CERT), lo que permitirá vía GPO acceder a él y que nuestro script de PowerShell pueda hacer uso del mismo.
El siguiente paso es crear una GPO, la cual nos permitirá en el inicio de sesión del usuario, instalar el certificado. Pues, para eso abrimos la consola de administración de directivas de grupo, nos vamos a la OU en donde queremos aplicar la directiva:
Escribimos un nombre descriptivo, yo sigo en la misma línea que antes pero ahora a nivel de GPO: USR INSTALACION CERT SBUITRAGO
- USR: me permite identificar que la sección que tiene configurada esta GPO es aplicada a los usuarios
- INSTALACION: Lo que hará esta directiva
- CERT: Identifico sobre que haré la instalación
- SBUITRAGO: Es el nombre del certificado que se instalará con esta GPO, yo he puesto SBUITRAGO pero podría ser cualquier cosa que a vosotros os ayude a identificarlo (DNI, Nombre Empresa, etc..)
Ahora la Editamos
Vamos a la sección de Scripts (inicio de sesión o cierre de sesión), en nuestro caso será de Inicio de sesión
Como utilizaremos un script de PowerShell, nos vamos a la pestaña de Scripts de PowerShell y pulsamos en agregar
Pulsamos en Examinar
Previamente yo tengo ya creado el script, básicamente utilizaremos el cmdlet Import-PfxCertificate y en la ruta del fichero será la ruta en donde hemos puesto previamente el certificado (\\ASIRLAB.COM\ASIRLAB\CERT\Cert_SBUITRAGO.pfx)
Desde la ventana de selección de scripts, nos lleva a la carpeta Logon de la directiva que hemos creado, ahí he copiado el script de PowerShell, simplemente lo selecciono y pulsamos en Abrir
Ahora únicamente pulsamos en Aceptar
Pulsamos en Aceptar
Una vez que tenemos nuestra GPO creada, lo que quiero es filtrar a quien se le aplicará esta directiva, para ello volveré a utilizar otro grupo de seguridad. En este caso, para tener distintos de los grupos de seguridad, además de ofrecer un “capa” más de acceso, me crearé un grupo que se llamará GPO PERMIT USR INSTALACION CERT SBUITRAGO:
- GPO: Esto me permite identificar a que aplicar permisos este grupo, además de cando buscamos algún grupo, ya podemos filtrar solo empezando por GPO
- PERMIT: Saber si este grupo es para que se aplique o deniegue la directiva de seguridad
- USR INSTALACION CERT SBUITRAGO: Es el nombre de la GPO creada, así sé a que directiva se está vinculando
Gráficamente lo vemos así representado, la GPO vinculada la OU USUARIOS, luego el Filtrado de Seguridad es aplicado a GPO PERMIT USR INSTALACION CERT SBUITRAGO y si vemos quien es miembro del grupo GPO XXX es la ACL CERT INTALACION SBUITRAGO y luego los miembros del grupo ACL ya es el usuario u otro grupo de usuarios, en mi caso es mi usuario
Esto permitirá aplicar la GPO a mi usuario, puesto que por anidaciones de grupos tengo acceso restrictivo a todo lo que necesito:
- GPO
- Ruta UNC en donde está el certificado
En cuanto al usuario o grupos de usuarios los quite del grupo ACL CERT INSTALCION SBUITRAGO ya no tendrían acceso a importarse el certificado ni a las rutas en donde están los mismos.
Ahora, si probamos a iniciar sesión en un equipo con la cuenta en cuestión, veremos que se le ha instalado el certificado:
Pues ahora que ya tenemos la primera parte de la configuración, veamos como podemos ahora retirarle el certificado a los usuarios. Para ello, debemos configurar una segunda directiva la cual vía PowerShell retirará en el inicio de sesión del usuario el certificado que queramos.
Nos creamos una GPO, en este caso les pondré el nombre USR ELIMINACION CERT SBUITRAGO, el nombre en la misma línea que antes
Vamos al misma sección que antes y elegimos un script de PowerShell, en el cual utilizamos el cmdlet Remove-Item. Aquí es donde tenemos que tener la Huella Digital del certificado (algo que hemos visto cuando hemos exportado el certificado del usuario)
Lo copiamos en la carpeta LOGON de la ruta de la GPO y lo seleccionamos
Ahora no tocamos el Filtrado de seguridad, puesto que queremos que se aplique a todos los usuarios (Usuarios Autenticado es el grupo por defecto y es un grupo especial, puesto que afectaría a usuarios y equipos (pero esto es otra cosa que ahora no aplica aquí)
Ahora tenemos las dos GPO aplicadas a la OU USUARIOS, por lo que tenemos que ordenarlas para que se procesen de forma adecuada por parte del usuario y se apliquen según lo esperado. En el orden de vínculos primero colocamos la GPO que elimina los certificados y luego la que los instala. De esta forma, siempre eliminará los certificados a todos los usuarios (lo intentará, lo tenga o no instalado) y luego se instalarán si se pertenece al grupo ACL CERT INSTALACION XXXXX
Esto es lo más sencillo, pero no los más optimizado, puesto que siempre se trataría de eliminar el certificado en cada inicio de sesión de todos los usuarios. Sino queremos esto, podemos crear otro grupo de seguridad que se aplique a la GPO USR ELIMINICACION CERT SBUITRAGO, de esta forma si se es miembro de ese grupo (de forma directa o por anidación) se te aplicará dicha GPO. De esta forma, tenemos que tener al usuario únicamente en uno de los grupos GPO PERMIT XXXX XXXXX XXX, bien de forma directa o por anidación, para que se aplique sólo lo que queremos y evitamos que ejecute siempre ambas GPO.
Aquí os nuestra esta configuración que acabo de comentar, la he configurado y mirad el resultado a nivel de usuario:
- Se aplica la GPO de Eliminación del certificado, como vemos el usuario ya no tiene su certificado personal y con GPRESULT /R (desde la sesión de usuario) vemos la GPO que se aplica (USR ELIMINACION CERT SBUITRAGO) y cual se filtra (USR INSTALCION CERT SBUITRAGO) y todo ello porque es miembro del grupo GPO PERMIT USR ELIMINACION CERT SBUITRAGO
- Se aplica la GPO de instalación del certificado, como vemos el usuario ya tiene su certificado personal y con GPRESULT /R (desde la sesión de usuario) vemos la GPO que se aplica (USR INSTALACION CERT SBUITRAGO) y cual se filtra (USR ELIMINACION CERT SBUITRAGO) y todo ello porque es miembro del grupo GPO PERMIT USR INSTALACION CERT SBUITRAGO
Como vemos, tenemos múltiples opciones de configuración. Esto es cuestión de como lo queráis configurar, yo creo que esta última configuración es las más “óptima”, pero la primera opción permite eliminar el certificado a todos los usuarios ( por si antes un usuario tenía instalado el certificado y no lo tuviesen que tener) sin que nos olvidemos de tenerlo en el grupo correspondiente. Todo es ajustable, porque si podemos a un grupo general de toda la empresa en la GPO de eliminación de certificados pues ya nos serviría, lo dicho, todo es configurable.
Me gustaría comentar algunas cosas con respecto a las GPO, cosas básicas que creo que se deberían configurar siempre:
- Definir el estado de la GPO, si sólo se aplica a usuarios, deshabilitar la configuración de equipo (y al contrario si procede)
- Si especificamos un grupo de seguridad para filtrar a quien se aplica o deniega dicha directa, no debemos quitar el grupo Usuarios Autenticados, únicamente debemos no marcar la casilla de Aplicar directiva de grupo, pero NUNCA quitarlo. Y el grupo al que queremos que se aplique la GPO debemos marcar la casilla Aplicar directiva de grupo
Por último, comentar que antes había dicho que cuando exportamos un certificado con la clave privada y especificamos un grupo de seguridad en vez de aplicar una contraseña para poder importar el certificado, el sistema automáticamente establece una contraseña al mismo. Si queremos ver la contraseña del certificado, simplemente procedemos a instalar el certificado de forma manual y pulsar en Mostrar contraseña
En cuanto a la configuración, comentar que con la importación vía PowerShell (Import-PfxCerticate), el certificado no tiene la posibilidad de exportar la clave privada por parte del usuario. Esto quiere decir, que el usuario no podría exportarse el certificado e instalarlo por su cuenta en otro equipo, más o menos sería como tenerlo en un Token de seguridad. Puesto que sin la clave privada, el usuario no podrá utilizarlo,
De todas formas, como filtramos el acceso al certificado vía grupo de seguridad, el usuario el cual no tiene acceso “físico” al fichero tampoco podría instalarlo. Por eso es importante tenerlo bien ajustado, puesto que al fin y al cabo estamos configurando un certificado empresarial. Pensad que con un certificado digital, el usuario puede firmar en nombre de la empresa, aprobar impuestos, etc… de ahí la importancia de tener esto bien configurado.
También podemos configurar con Windows Server 2016 la membresía temporal, lo que nos permitiría añadir un usuario al grupo de instalación del certificado durante x días y luego lo retirase de forma automática. En este escenario, tendríamos que configurar las dos GPOS y sólo filtrada por un grupo de seguridad la que lo instala, de tal forma que siempre tengamos la GPO de eliminación de certificados a todos los usuarios. De esta forma, como el usuario xxx a los xx días ya no está en el grupo de seguridad que permite que se le instale, el usuario ya no lo tendría. Es una excelente opción para ajustar todavía más la seguridad de este proceso, pero esto es algo que comentaré en otro artículo.
Os vuelvo a recordar que podemos hacer múltiples configuraciones, vía GPO, grupos de seguridad, etc.. lo básico es configurarlo con las medidas de seguridad necesarias y que tengamos controlado todo el proceso. Su configuración es muy sencilla, porque incluso los scripts de PowerShell son muy básicos, pero es justo lo que necesitamos.
Al final me ha salido un artículo un poco extenso, pero aún así, espero que os sea de utilidad!!
Antonio / 11 mayo, 2017
Hola:
Hay alguna manera de ver desde el pc de un usuario que una política le ha borrado un certificado Personal? O desde el servidor de políticas?
Santiago Buitrago Reis / Autor / 13 mayo, 2017
Hola Antonio,
Lo que puedes hacer es ver que GPO se le aplica y si esa GPO tiene la configuración necesaria para borrarlo. Como ves, al final es un script que borrar un objeto en base a su número de serie (thumbprint), por lo que la GPO debe estar correctamente definida. También se puede hacer que borre todos los certificados, pero aún así, tendrías que ver que GPO se aplican al usuario (gpresult).
En el visor de eventos puedes verlo, en la rama de CertificateServicesCliente-Lifecycle-User, verás que si eliminas un certificado queda registro de ello. Yo he hecho una prueba y mira lo que me sale:
Se ha eliminado un certificado. Vea la sección “Detalles” para obtener más información.
+ System
– Provider
[ Name] Microsoft-Windows-CertificateServicesClient-Lifecycle-User
[ Guid] {bea18b89-126f-4155-9ee4-d36038b02680}
EventID 1004
Version 0
Level 4
Task 0
Opcode 0
Keywords 0x8000000000000000
– TimeCreated
[ SystemTime] 2017-05-13T14:36:02.404472000Z
EventRecordID 29
Correlation
– Execution
[ ProcessID] 10328
[ ThreadID] 1228
Channel Microsoft-Windows-CertificateServicesClient-Lifecycle-User/Operational
Computer ASIRSF04.asirsl.com
– Security
[ UserID] S-1-5-21-1441895848-2563715459-1397627946-1177
– UserData
– CertNotificationData
[ ProcessName] mmc.exe
[ AccountName] ASIRSL\sbuitrago
[ Context] User
– CertificateDetails
[ Thumbprint] d30b143460ae7699079c40ed8417829430def65e
– EKUs
– EKU
[ Name] Autenticación del cliente
[ OID] 1.3.6.1.5.5.7.3.2
NotValidAfter 2017-11-07T15:35:15Z
Espero que te sirva
hoteles en cali / 21 enero, 2018
Gracias esta busque y busque esto y no encontraba uno que entendiera 😉
Saludos!
Santiago Buitrago Reis / Autor / 26 enero, 2018
Me alegro que te haya servido de ayuda!!