En
uno de nuestros artículos anteriores, hablamos sobre la importancia de la autenticación de dos factores en los portales corporativos de la compañía. La última vez, demostramos cómo configurar la autenticación segura en el servidor web IIS.
En los comentarios, se nos pidió que escribiéramos instrucciones para los servidores web más comunes para Linux: nginx y Apache.
Usted preguntó, nosotros escribimos.
¿Qué necesitas para comenzar?
- Cualquier distribución moderna de Linux. Hice una configuración de prueba en MX Linux 18.2_x64. Ciertamente, esta no es una distribución de servidor, pero apenas hay diferencias para Debian. Para otras distribuciones, las rutas a las bibliotecas / configuraciones pueden variar ligeramente.
- Token Continuamos utilizando el modelo PKI Rutoken EDS , que es ideal para el rendimiento de alta velocidad para aplicaciones corporativas.
- Para trabajar con el token en Linux, debe instalar los siguientes paquetes:
libccid libpcsclite1 pcscd pcsc-tools opensc
Escritura de certificados
En artículos anteriores, confiamos en el hecho de que los certificados de servidor y cliente se emitirán utilizando Microsoft CA. Pero como estamos configurando todo en Linux, al mismo tiempo hablaremos de una forma alternativa de emitir estos certificados, sin salir de Linux.
Utilizaremos XCA como CA (
https://hohnstaedt.de/xca/ ), que está disponible en cualquier distribución moderna de Linux. Todas las acciones que realizaremos en XCA también se pueden realizar en modo de línea de comandos utilizando las utilidades OpenSSL y pkcs11-tool, pero en aras de la simplicidad y la claridad, no las daremos en este artículo.
Empezando
- Instalar:
$ apt-get install xca
- Y corre:
$ xca
- Creamos nuestra base de datos para CA - /root/CA.xdb
Recomendamos que almacene la base de datos de la Autoridad de certificación en una carpeta donde solo el administrador tenga acceso. Esto es importante para proteger las claves privadas de los certificados raíz, que se utilizan para firmar todos los demás certificados.
Crear claves y certificado de CA raíz
La infraestructura de clave pública (PKI) se basa en un sistema jerárquico. Central para este sistema es la autoridad de certificación raíz o CA raíz. Su certificado debe ser creado primero.
- Creamos la clave privada RSA-2048 para CA. Para hacer esto, en la pestaña Claves privadas , haga clic en Nueva clave y seleccione el tipo apropiado.
- Establezca un nombre para el nuevo par de claves. Lo llamé CA Key.
- Escribimos el certificado de CA en sí, utilizando el par de claves creado. Para hacer esto, vaya a la pestaña Certificados y haga clic en Nuevo certificado .
- Asegúrese de elegir SHA-256 , porque usar SHA-1 ya no puede considerarse seguro.
- Como plantilla, asegúrese de seleccionar CA [predeterminada]. No olvide hacer clic en Aplicar todo ; de lo contrario, la plantilla no se aplica.
- En la pestaña Asunto , seleccione nuestro par de claves. Allí puede completar todos los campos principales del certificado.
Crear claves y certificado de servidor https
- Del mismo modo, creamos la clave privada RSA-2048 para el servidor, la llamé: clave del servidor.
- Al crear el certificado, seleccionamos que el certificado del servidor debe estar firmado en el certificado de CA.
- No te olvides de elegir SHA-256 .
- Como plantilla, seleccione [predeterminado] HTTPS_server . Haga clic en Aplicar todo .
- Luego, en la pestaña Asunto , seleccione nuestra clave y complete los campos obligatorios.

Creamos claves y el certificado para el usuario.
- La clave privada del usuario se almacenará en nuestro token. Para trabajar con él, debe instalar la biblioteca PKCS # 11 desde nuestro sitio. Para distribuciones populares, distribuimos paquetes listos para usar que se encuentran aquí: https://www.rutoken.ru/support/download/pkcs/ . También tenemos compilaciones para arm64, armv7el, armv7hf, e2k, mipso32el, que se pueden tomar en nuestro SDK: https://www.rutoken.ru/developers/sdk/ . Además de los ensamblados para Linux, también hay ensamblajes para macOS, Freebsd y Android.
- Agregue el nuevo proveedor PKCS # 11 al XCA. Para hacer esto, vaya al menú Opciones en la pestaña Proveedor PKCS # 11 .
- Haga clic en Agregar y seleccione la ruta a la biblioteca PKCS # 11. En mi caso es \ usr \ lib \ librtpkcs11ecp.so.
- Necesitamos un token formateado Rutoken EDS PKI. Descargue la utilidad rtAdmin: https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
- Llevamos a cabo
$ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN- >
- Como el tipo de clave que seleccionamos, la clave RSA-2048 en el PKI Rutoken EDS. Llamé a esta clave Clave de cliente.
- Ingrese el código PIN. Y estamos esperando la finalización de la generación de hardware del par de claves
- Creamos el certificado para el usuario por analogía con el certificado del servidor. Esta vez, seleccione la plantilla HTTPS_client [predeterminada] y no olvide hacer clic en Aplicar todo .
- En la pestaña Asunto , ingrese la información del usuario. Respondemos afirmativamente a la solicitud de guardar el certificado para el token.
Como resultado, en la pestaña
Certificados en XCA, debería obtener algo como esto.
Este conjunto mínimo de claves y certificados es suficiente para comenzar a configurar los servidores directamente.
Para configurar, necesitamos exportar el certificado de CA, el certificado del servidor y la clave privada del servidor.
Para hacer esto, seleccione la entrada deseada en la pestaña correspondiente en el XCA y haga clic en
Exportar .
Nginx
Cómo instalar y ejecutar un servidor nginx, no escribiré: hay suficientes artículos en Internet sobre este tema, sin mencionar la documentación oficial. Comencemos por configurar HTTPS y la autenticación de token de dos factores.
Agregue las siguientes líneas a la sección del servidor en nginx.conf:
server { listen 443 ssl; ssl_verify_depth 1; ssl_certificate /etc/nginx/Server.crt; ssl_certificate_key /etc/nginx/ServerKey.pem; ssl_client_certificate /etc/nginx/CA.crt; ssl_verify_client on; }
Puede encontrar una descripción detallada de todos los parámetros relacionados con la configuración de SSL en nginx aquí:
https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificateSolo describiré brevemente los que yo mismo pregunté:
- ssl_verify_client: indica que la cadena de confianza del certificado debe verificarse.
- ssl_verify_depth: determina la profundidad de la búsqueda de certificados raíz de confianza en la cadena. Dado que nuestro certificado de cliente se firma inmediatamente en el certificado raíz, la profundidad se establece en 1. Si el certificado de usuario se firma en una CA intermedia, se debe especificar 2 en este parámetro, y así sucesivamente.
- ssl_client_certificate: especifica la ruta al certificado raíz de confianza, que se utiliza para verificar la confianza en el certificado de usuario.
- ssl_certificate / ssl_certificate_key: indique la ruta al certificado del servidor / clave privada.
No olvide ejecutar nginx -t para verificar que no haya errores tipográficos en la configuración, y que todos los archivos estén donde sea necesario, etc.
¡Y en realidad todo! Como puede ver, la configuración es muy simple.
Comprobando el trabajo en Firefox
Dado que estamos haciendo todo por completo en Linux, asumiremos que nuestros usuarios también trabajan en Linux (si tienen Windows,
consulte las instrucciones para configurar los navegadores en el artículo anterior .
- Iniciamos Firefox.
- Intentemos iniciar sesión sin un token al principio. Obtenemos la siguiente imagen:
- Vaya a acerca de: preferencias # privacidad , y vaya a Dispositivos de seguridad ...
- Haga clic en Cargar para agregar el nuevo controlador de dispositivo PKCS # 11 y especifique la ruta a nuestro librtpkcs11ecp.so.
- Para verificar que el certificado esté visible, puede ir al Administrador de certificados . Se le solicita un código PIN. Después de la entrada correcta, puede verificar que en la pestaña Sus Certificados haya aparecido nuestro certificado con un token.
- Ahora vamos con el token. Firefox sugiere elegir un certificado que se seleccionará en el servidor. Elige nuestro certificado.
- BENEFICIOS!
La configuración se realiza una vez y, como puede ver en la ventana de solicitud de certificado, podemos guardar nuestra elección. Después de eso, cada vez que ingresa al portal, solo necesitamos insertar un token e ingresar el código PIN del usuario que se configuró durante el formateo. Después de dicha autenticación, el servidor ya sabe qué usuario ha iniciado sesión y ya no puede hacer ninguna ventana adicional para la verificación, pero inmediatamente deja que el usuario ingrese a su cuenta personal.
Apache
Al igual que con nginx, nadie debería tener problemas para instalar Apache. Si no sabe cómo instalar este servidor web, solo use la documentación oficial.
Y estamos comenzando a configurar nuestro HTTPS y la autenticación de dos factores:
- Primero necesitas activar mod_ssl:
$ a2enmod ssl
- Y luego habilite la configuración predeterminada del sitio HTTPS:
$ a2ensite default-ssl
- Ahora edite el archivo de configuración: /etc/apache2/sites-enabled/default-ssl.conf:
SSLEngine on SSLProtocol all -SSLv2 SSLCertificateFile /etc/apache2/sites-enabled/Server.crt SSLCertificateKeyFile /etc/apache2/sites-enabled/ServerKey.pem SSLCACertificateFile /etc/apache2/sites-enabled/CA.crt SSLVerifyClient require SSLVerifyDepth 10
Como puede ver, los nombres de los parámetros casi coinciden con los nombres de los parámetros en nginx, por lo que no los explicaré. Una vez más, cualquier persona interesada en los detalles, bienvenido a la documentación.
Ahora reinicie nuestro servidor:
$ service apache2 reload $ service apache2 restart
Como puede ver, configure la autenticación de dos factores en cualquier servidor web, que en Windows, que en Linux lleva un máximo de una hora. Y configurar navegadores lleva unos 5 minutos. Mucha gente piensa que configurar y trabajar con autenticación de dos factores es difícil e incomprensible. Espero nuestro artículo al menos un poco, pero desacreditando este mito.