Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux

Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux
В uno de nuestros artículos anteriores Hablamos de la importancia de la autenticación de dos factores en los portales corporativos de las empresas. La última vez demostramos cómo configurar la autenticación segura en el servidor web IIS.

En los comentarios, nos pidieron que escribiéramos instrucciones para los servidores web más comunes para Linux: nginx y Apache.

Usted preguntó, escribimos.

¿Qué necesitas para estar listo?

  • Cualquier distribución Linux moderna. Hice una configuración de prueba en MX Linux 18.2_x64. Por supuesto, esta no es una distribución de servidor, pero es poco probable que haya diferencias con Debian. Para otras distribuciones, las rutas a las bibliotecas de configuración pueden diferir ligeramente.
  • Simbólico. Seguimos usando el modelo. Rutoken EDS PKI, que es ideal en términos de características de velocidad para uso corporativo.
  • Para trabajar con un token en Linux, necesita instalar los siguientes paquetes:
    libccid libpcsclite1 pcscd pcsc-herramientas opensc

Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux

Expedición 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, también le informaremos sobre una forma alternativa de emitir estos certificados, sin salir de Linux.
Usaremos XCA como CA (https://hohnstaedt.de/xca/), que está disponible en cualquier distribución moderna de Linux. Todas las acciones que realizaremos en XCA se pueden realizar en modo línea de comandos usando las utilidades OpenSSL y pkcs11-tool, pero para mayor simplicidad y claridad no las presentaremos en este artículo.

Primeros pasos

  1. Instalar en pc:
    $ apt-get install xca
  2. Y ejecutamos:
    $ xca
  3. Creamos nuestra base de datos para CA - /root/CA.xdb
    Recomendamos almacenar 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

Una infraestructura de clave pública (PKI) se basa en un sistema jerárquico. Lo principal en este sistema es la autoridad de certificación raíz o CA raíz. Primero se debe crear su certificado.

  1. Creamos una clave privada RSA-2048 para la CA. Para hacer esto, en la pestaña Llaves privadas empujar Nueva clave y seleccione el tipo apropiado.
  2. Establezca un nombre para el nuevo par de claves. Lo llamé clave CA.
  3. Emitimos el certificado de CA en sí, utilizando el par de claves creado. Para hacer esto, vaya a la pestaña Certificados y pulse Nuevo certificado.
  4. Asegúrate de elegir SHA-256, porque el uso de SHA-1 ya no puede considerarse seguro.
  5. Asegúrate de elegir como plantilla. [predeterminado]CA. No olvides hacer clic en Aplicar todo; de lo contrario, la plantilla no se aplica.
  6. lengüeta Asunto Elija nuestro par de claves. Allí podrá completar todos los campos principales del certificado.

Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux

Creación de claves y un certificado de servidor https

  1. De manera similar, creamos una clave privada RSA-2048 para el servidor, la llamé Clave del Servidor.
  2. Al crear un certificado, seleccionamos que el certificado del servidor debe estar firmado con un certificado CA.
  3. No olvides seleccionar SHA-256.
  4. Elegimos como plantilla. [predeterminado] servidor_HTTPS. Haga clic en Aplicar todo.
  5. Luego en la pestaña Asunto seleccione nuestra clave y complete los campos requeridos.

Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux

Crear claves y certificado para el usuario.

  1. La clave privada del usuario se almacenará en nuestro token. Para trabajar con él, necesita instalar la biblioteca PKCS#11 desde nuestro sitio web. Para distribuciones populares, distribuimos paquetes listos para usar, que se encuentran aquí: https://www.rutoken.ru/support/download/pkcs/. También tenemos ensamblajes para arm64, armv7el, armv7hf, e2k, mipso32el, que se pueden descargar desde nuestro SDK. https://www.rutoken.ru/developers/sdk/. Además de los ensamblados para Linux, también existen ensamblados para macOS, freebsd y android.
  2. Agregar un nuevo proveedor PKCS#11 a XCA. Para hacer esto, vaya al menú. Opciones a la pestaña Proveedor PKCS#11.
  3. presionamos Añada y seleccione la ruta a la biblioteca PKCS#11. En mi caso es usrliblibrtpkcs11ecp.so.
  4. Necesitaremos un token PKI Rutoken EDS formateado. Descargue la utilidad rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. realizamos
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Seleccionamos la clave RSA-2048 para Rutoken EDS PKI como tipo de clave. Llamé a esta clave Clave de Cliente.

    Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux

  7. Ingrese el código PIN. Y esperamos a que se complete la generación de hardware del par de claves.

    Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux

  8. Creamos un certificado para el usuario por analogía con el certificado del servidor. Esta vez seleccionamos una plantilla. [predeterminado] HTTPS_cliente y no olvides hacer clic Aplicar todo.
  9. lengüeta Asunto introducir información sobre el usuario. Respondemos afirmativamente a la solicitud de guardar el certificado del token.

Como resultado, en la pestaña Certificados en XCA deberías obtener algo como esto.

Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux
Este conjunto mínimo de claves y certificados es suficiente para comenzar a configurar los servidores.

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 XCA y haga clic en Exportar.

Nginx

No escribiré cómo instalar y ejecutar un servidor nginx; hay suficientes artículos sobre este tema en Internet, sin mencionar la documentación oficial. Vayamos directamente a configurar HTTPS y la autenticación de dos factores mediante un token.

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_certificate

Sólo describiré brevemente las que me pregunté:

  • ssl_verify_client: especifica que es necesario verificar la cadena de confianza del certificado.
  • ssl_verify_ Depth: define la profundidad de búsqueda del certificado raíz confiable 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 está firmado en una CA intermedia, entonces se debe especificar 2 en este parámetro, y así sucesivamente.
  • ssl_client_certificate: especifica la ruta al certificado raíz confiable, que se utiliza al verificar la confianza en el certificado del usuario.
  • ssl_certificate/ssl_certificate_key: indica la ruta al certificado/clave privada del servidor.

No olvide ejecutar nginx -t para verificar que no haya errores tipográficos en la configuración, que todos los archivos estén en el lugar correcto, etc.

¡Y eso es todo! Como puede ver, la configuración es muy sencilla.

Comprobando que funciona en Firefox

Como hacemos todo completamente en Linux, asumiremos que nuestros usuarios también trabajan en Linux (si tienen Windows, entonces consulte las instrucciones para configurar navegadores en el artículo anterior.

  1. Iniciemos Firefox.
  2. Primero intentemos iniciar sesión sin un token. Obtenemos esta imagen:

    Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux

  3. Ir a acerca de: preferencias # privacidad, y vamos a Dispositivos de seguridad…
  4. presionamos Cargapara agregar un nuevo controlador de dispositivo PKCS#11 y especificar la ruta a nuestro librtpkcs11ecp.so.
  5. Para comprobar que el certificado está visible, puede ir a Administrador de certificados. Se le pedirá que ingrese su PIN. Después de la entrada correcta, puede verificar lo que hay en la pestaña Sus certificados Apareció nuestro certificado del token.
  6. Ahora vamos con la ficha. Firefox le solicita que seleccione un certificado que se seleccionará para el servidor. Elija nuestro certificado.

    Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux

  7. ¡GANANCIA!

    Autenticación de dos factores en el sitio mediante un token USB. Ahora también para Linux

La configuración se realiza una vez y, como puede ver en la ventana de solicitud de certificado, podemos guardar nuestra selección. Después de esto, cada vez que iniciemos sesión en el portal, solo necesitaremos insertar un token e ingresar el código PIN de usuario que se especificó durante el formateo. Después de dicha autenticación, el servidor ya sabe qué usuario ha iniciado sesión y ya no puede crear ventanas adicionales para la verificación, sino que inmediatamente permite que el usuario acceda 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, utilice la documentación oficial.

Y comenzamos a configurar nuestro HTTPS y autenticación de dos factores:

  1. Primero necesitas activar mod_ssl:
    $ a2enmod ssl
  2. Y luego habilite la configuración HTTPS predeterminada del sitio:
    $ a2ensite default-ssl
  3. Ahora editamos 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 puedes ver, los nombres de los parámetros prácticamente coinciden con los nombres de los parámetros en nginx, por lo que no los explicaré. Nuevamente, cualquier persona interesada en los detalles es bienvenida a la documentación.
    Ahora reiniciamos nuestro servidor:

    $ service apache2 reload
    $ service apache2 restart

  4. Como puede ver, configurar la autenticación de dos factores en cualquier servidor web, ya sea Windows o Linux, lleva una hora como máximo. Y configurar los navegadores lleva unos 5 minutos. Mucha gente piensa que configurar y trabajar con la autenticación de dos factores es difícil y poco claro. Espero que nuestro artículo desacredite este mito, al menos un poco.

Solo los usuarios registrados pueden participar en la encuesta. Registrarsepor favor

¿Necesita instrucciones para configurar TLS con certificados según GOST 34.10-2012?

  • Sí, TLS-GOST es muy necesario.

  • No, sintonizar con algoritmos GOST no es interesante

44 usuarios votaron. 9 usuarios se abstuvieron.

Fuente: habr.com

Añadir un comentario