Experiencia en la aplicación de la tecnología Rutoken para el registro y autenticación de usuarios en el sistema (parte 2)

¡Buenos días! Continuemos explorando este tema (la parte anterior se puede consultar en el enlace).

Hoy pasaremos a la parte práctica. Comenzaremos configurando nuestra propia autoridad certificadora basada en una biblioteca criptográfica de código abierto completa, openSSL. Este algoritmo ha sido probado utilizando Windows 7.

Una vez instalado openSSL, podremos realizar diversas operaciones criptográficas (por ejemplo, la creación de claves y certificados) a través del símbolo del sistema.

El procedimiento a seguir es el siguiente:

  1. Descargamos el instalador openssl-1.1.1g.
    Existen diferentes versiones de openSSL. En la documentación de Rutoken se mencionó que se necesita la versión openSSL 1.1.0 o superior. Yo utilicé la versión openssl-1.1.1g. Se puede descargar openSSL desde el sitio oficial, pero para una instalación más sencilla es recomendable encontrar el archivo de instalación para Windows en Internet. Yo lo hice por ti: slproweb.com/products/Win32OpenSSL.html
    Es necesario desplazarse hacia abajo en la página y descargar Win64 OpenSSL v1.1.1g EXE 63MB Installer.
  2. Instalamos openssl-1.1.1g en el ordenador.
    La instalación debe realizarse en la ruta estándar, que se indica automáticamente en la carpeta C:Program Files. El programa se instalará en la carpeta OpenSSL-Win64.
  3. Para configurar openSSL según tus necesidades, existe el archivo openssl.cfg. Este archivo se encuentra en la ruta C:Program FilesOpenSSL-Win64bin si instalaste openSSL como se indicó en el punto anterior. Vamos a la carpeta donde se almacena openssl.cfg y abrimos este archivo utilizando, por ejemplo, Notepad++.
  4. Probablemente ya dedujiste que la configuración de la autoridad certificadora se realizará mediante cambios en el contenido del archivo openssl.cfg, y estás absolutamente correcto. Para ello, es necesario configurar el comando [ ca ]. En el archivo openssl.cfg, se puede encontrar el inicio del texto donde realizaremos cambios como: [ ca ].
  5. Ahora daré un ejemplo de configuración con su descripción:
    [ ca ]
    default_ca	= CA_default		
    
     [ CA_default ]
    dir		= /Users/username/bin/openSSLca/demoCA		 
    certs		= $dir/certs		
    crl_dir		= $dir/crl		
    database	= $dir/index.txt	
    new_certs_dir	= $dir/newcerts	
    certificate	= $dir/ca.crt 	
    serial		= $dir/private/serial 		
    crlnumber	= $dir/crlnumber	
    					
    crl		= $dir/crl.pem 		
    private_key	= $dir/private/ca.key
    x509_extensions	= usr_cert
    

    Ahora es necesario crear el directorio demoCA y las subcarpetas, como se muestra en el ejemplo anterior. Y ubicar en este directorio según la ruta que se indica en dir (en mi caso /Users/username/bin/openSSLca/demoCA).

    Es muy importante especificar correctamente el dir: es la ruta al directorio donde estará nuestro centro de certificación. Este directorio debe estar necesariamente en /Users (es decir, en la cuenta de algún usuario). Si se coloca este directorio, por ejemplo, en C:Program Files, el sistema no podrá encontrar el archivo de configuración openssl.cfg (al menos eso me pasó a mí).

    $dir — aquí se introduce la ruta que se indica en dir.

    Otro punto importante es crear un archivo vacío index.txt; sin este archivo, los comandos «openSSL ca …» no funcionarán.

    También es necesario tener el archivo serial, la clave privada raíz (ca.key) y el certificado raíz (ca.crt). El proceso para obtener estos archivos se describirá más adelante.

  6. Conectamos los algoritmos de cifrado proporcionados por Rutoken.
    Esta conexión ocurre en el archivo openssl.cfg.
    • Primero, se requiere descargar los algoritmos necesarios de Rutoken. Estos son los archivos rtengine.dll, rtpkcs11ecp.dll.
      Para ello, descargamos el SDK de Rutoken: www.rutoken.ru/developers/sdk.

      El SDK de Rutoken es todo lo que hay para los desarrolladores que desean probar Rutoken. Allí hay ejemplos separados para trabajar con Rutoken en diferentes lenguajes de programación, así como algunas bibliotecas. Nuestras bibliotecas rtengine.dll y rtpkcs11ecp.dll se encuentran en el SDK de Rutoken en la siguiente ubicación:

      sdk/openssl/rtengine/bin/windows-x86_64/lib/rtengine.dll
      sdk/pkcs11/lib/windows-x86_64/rtpkcs11ecp.dll

      Es un punto muy importante. Las bibliotecas rtengine.dll, rtpkcs11ecp.dll no funcionan sin el controlador instalado para Rutoken. Además, el Rutoken debe estar conectado a la computadora. (para la instalación de todo lo necesario para Rutoken, consulta la parte anterior del artículo habr.com/ru/post/506450)

    • Las bibliotecas rtengine.dll y rtpkcs11ecp.dll se pueden mantener en cualquier lugar de la cuenta de usuario.
    • Especificamos las rutas a estas bibliotecas en openssl.cfg. Para ello, abrimos el archivo openssl.cfg, y al inicio de este archivo se debe colocar la línea:
      openssl_conf = openssl_def

      Al final del archivo, es necesario agregar:

      [ openssl_def ]
      engines = engine_section
      [ engine_section ]
      rtengine = gost_section
      [ gost_section ]
      dynamic_path = /Users/username/bin/sdk-rutoken/openssl/rtengine/bin/windows-x86_64/lib/rtengine.dll
      MODULE_PATH = /Users/username/bin/sdk-rutoken/pkcs11/lib/windows-x86_64/rtpkcs11ecp.dll
      RAND_TOKEN = pkcs11:manufacturer=AktivCo.;model=RutokenECP
      default_algorithms = CIPHERS, DIGEST, PKEY, RAND
      

      dynamic_path – es necesario especificar su propia ruta a la biblioteca rtengine.dll.
      MODULE_PATH — es necesario especificar su propia ruta a la biblioteca rtpkcs11ecp.dll.

  7. Agregamos variables de entorno.

    Es necesario agregar una variable de entorno que indique la ruta al archivo de configuración openssl.cfg. En mi caso, se creó la variable OPENSSL_CONF con la ruta C:Program FilesOpenSSL-Win64binopenssl.cfg.

    En la variable path, es necesario indicar la ruta a la carpeta donde se encuentra openssl.exe, en mi caso: C:Program FilesOpenSSL-Win64bin.

  8. Ahora se puede volver al punto 5 y crear los archivos que faltan para el directorio demoCA.
    1. El primer archivo importante sin el cual nada funcionará es serial. Este archivo no tiene extensión y su valor debe ser 01. Se puede crear este archivo manualmente y escribir dentro 01. También se puede descargar desde el SDK de RUTOKEN en la ruta sdk/openssl/rtengine/samples/tool/demoCA/.
      En el directorio demoCA se encuentra el archivo serial, que es el que necesitamos.
    2. Creamos la clave privada raíz.
      Para ello, utilizaremos el comando de la biblioteca openSSL, que debe ejecutarse directamente en la línea de comandos:
      openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out ca.key

    3. Creamos el certificado raíz.
      Para ello, utilizaremos el siguiente comando de la biblioteca openSSL:
      openssl req -utf8 -x509 -key ca.key -out ca.crt

      Tenga en cuenta que se requiere la clave privada raíz que se creó en el paso anterior para generar el certificado raíz. Por lo tanto, la línea de comandos debe ejecutarse en el mismo directorio.

    Ahora tenemos todos los archivos faltantes para la configuración completa del directorio demoCA. Coloque los archivos creados en los directorios que se indican en el punto 5.

Consideraremos que, después de completar los 8 puntos, nuestra autoridad certificadora está completamente configurada.

En la siguiente parte, explicaré cómo trabajaremos con la autoridad certificadora para realizar lo que se describió en la parte anterior del artículo.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster