Seguridad Informática con Criptografía y Certificados SSH
En esta presentación, exploraremos la importancia de la seguridad informática y las técnicas fundamentales de criptografía, así como el uso de certificados digitales y autenticación en SSH.

by Enrique Serrano Lendines

Introducción
  • Contexto y Aplicabilidad:
  • En el ámbito de la Seguridad Informática, abordaremos la aplicabilidad de estas técnicas en el cifrado de mensajes, la creación de certificados digitales para servidores web y la autenticación en SSH.
  • Propósito de la Tarea:
  • El propósito es aplicar prácticamente los conocimientos adquiridos en criptografía, certificados digitales y autenticación en SSH, esenciales para la seguridad informática.
  • Descripción General de las Tareas:
  • Exploraremos tres situaciones prácticas: Mensajería Cifrada, Certificado Digital para un Servidor Web y Autenticación en SSH con Certificado Digital.
Mensajería Cifrada

1

Instalación de GnuPG
sudo apt-get update sudo apt-get install gnupg
  • Esta secuencia de comandos actualiza la lista de paquetes disponibles en el sistema y luego instala GnuPG, una herramienta que nos permitirá cifrar y firmar mensajes de forma segura.

2

Generación de un Par de Claves
gpg --full-generate-key
  • Ejecutar este comando inicia el proceso de generación de un par de claves (pública y privada) que se utilizarán para cifrar y descifrar mensajes, así como para verificar la autenticidad de los mismos.

3

Exportación de Clave Pública
gpg --output clave_publica.asc --armor --export Enrique cat clave_publica.asc
  • Exportamos nuestra clave pública en formato ASCII a un archivo llamado clave_publica.asc. La opción --armor garantiza que la clave esté en un formato legible. La segunda línea (cat clave_publica.asc) muestra el contenido del archivo, incluida la ID de la clave que será necesaria para identificación.

4

Publicación en el Servidor del MIT
gpg --keyserver pgp.mit.edu --send-keys 183A473409FE228FA29AABA8818AF84AA8B55037
  • Enviamos nuestra clave pública al servidor de claves del MIT para que otras personas puedan acceder a ella y verificar nuestra identidad.

5

Importación de Clave de Otro Estudiante
gpg --import hola.asc
  • Importamos la clave pública de nuestro compañero desde el archivo hola.asc para poder cifrar mensajes destinados a él.

6

Cifrado de un Mensaje
gpg --output mensaje_cifrado.gpg --encrypt --recipient BE8C00B215263939 mensaje.txt
  • Cifra el contenido del archivo mensaje.txt utilizando la clave pública del destinatario.

7

Firma de un Documento
gpg --output documento_firmado.sig --sign mensaje.txt
  • Firma el contenido del archivo mensaje.txt para garantizar su autenticidad.

8

Cifrado y Firma de un Documento
gpg --output mensaje_cifrado_firmado.sig --encrypt --sign --recipient BE8C00B215263939 mensaje.txt
  • Realiza ambas operaciones: cifra y firma el mensaje.

9

Descifrado de un Mensaje
gpg --output mensaje_descifrado.txt --decrypt cifrado.txt.gpg
  • Descifra el contenido del archivo cifrado cifrado.txt.gpg

10

Verificación de un Documento Firmado
gpg --verify cifrado.sig
  • Verifica la firma del archivo cifrado.sig para garantizar la autenticidad del remitente.
Certificado Digital para un Servidor Web

1

Instalación de OpenSSL
Comprobación de que es mi maquina:
apt-get install -y openssl
  • Se instala OpenSSL, una herramienta que nos permitirá generar un certificado digital autofirmado.

2

Generación de un Certificado Autofirmado
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
  • Generamos un certificado digital autofirmado con una duración de 365 días. Este certificado es necesario para permitir conexiones seguras (HTTPS) a nuestro servidor web.

3

Habilitación del Módulo SSL en Apache
a2enmod ssl service apache2 restart
  • Habilitamos el módulo SSL en Apache para permitir conexiones seguras y reiniciamos el servicio para aplicar los cambios.

4

Configurar Virtual Host para HTTPS
nano /etc/apache2/sites-available/172.17.0.2.conf
  • Editamos el archivo de configuración del Virtual Host para permitir conexiones seguras.

5

Creación de una Página de Inicio Segura
mkdir /var/www/172.17.0.2 echo "<?php function cuota(\$capital, \$interes, \$plazo) { \$cuota = 0; \$periodicidad = 12; \$interesMensual = (\$interes/100) / \$periodicidad; \$plazo *= \$periodicidad; \$cuota = (\$capital*\$interesMensual) / (1-pow(1+\$interesMensual,-\$plazo)); return round(\$cuota,2); } echo '<b>Cuota</b>: '.cuota(100000,5,12).'<br>'; function esPrimo(\$n) { \$resultado = true; \$maxDiv = sqrt(\$n)+1; for(\$i=4;\$i<\$maxDiv;\$i++) { if(\$n%\$i==0) { \$resultado = false; break; } } return \$resultado; } \$n = 2; echo \"<b>¿Es \$n primo?</b>: \". ((esPrimo(\$n))? 'Sí':'No').'<br>'; \$n = 7; echo \"<b>¿Es \$n primo?</b>: \". ((esPrimo(\$n))? 'Sí':'No').'<br>'; \$n = 49; echo \"<b>¿Es \$n primo?</b>: \". ((esPrimo(\$n))? 'Sí':'No').'<br>'; function factores(\$n) { \$factores = '1'; \$factor = 2; while(\$n>1) { if(\$n%\$factor==0) { \$factores .= \"·\$factor\"; \$n = \$n / \$factor; } else \$factor++; } return \$factores; } \$n = 6; echo \"<b>Factores de \$n</b>:\".factores(\$n).'<br>'; \$n = 30; echo \"<b>Factores de \$n</b>:\".factores(\$n).'<br>'; \$n = 29; echo \"<b>Factores de \$n</b>:\".factores(\$n).'<br>'; ?>" > /var/www/172.17.0.2/index.php
  • Creamos un directorio para nuestro sitio web y una página de inicio básica. El segundo comando utiliza comillas dobles en el comando echo para que las variables dentro del código PHP se expandan correctamente. Las comillas dentro del código PHP se han escapado con barras invertidas (\) para evitar conflictos con las comillas exteriores del comando echo.

6

Verificación y Recarga de la Configuración en Apache
apache2ctl configtest service apache2 reload
Verificamos la configuración de Apache y recargamos el servicio para aplicar los cambios realizados.

7

Acceso al Sitio Web Seguro
https://172.17.0.2
Finalmente, podemos acceder a nuestro sitio web seguro utilizando el protocolo HTTPS.
Autenticación en SSH por Certificado Digital

1

Entorno de Trabajo:
  • Máquina Cliente (enrique): IP - 192.168.8.18 .
  • Máquina Servidor SSH (usuario): IP - 192.168.8.38 .

2

Generación de Claves en el Cliente (enrique):
ssh-keygen
  • La clave privada (id_rsa) y pública (id_rsa.pub) se generan en ~/.ssh/.

3

Copia de Clave Pública al Servidor (usuario):
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
  • Se copia la clave pública del cliente al archivo ~/.ssh/authorized_keys en el servidor.

4

Acceso al Servidor sin Contraseña desde el Cliente (usuario):
  • El acceso ahora se realiza sin contraseña, solo con la frase de paso.

5

Acceso sin Contraseña desde Gnome (Almacenamiento GNOME Keyring):
  • En entornos gráficos como Gnome, al acceder por primera vez, se solicita la frase de paso. Luego se almacena en GNOME Keyring y no se pide nuevamente en la misma sesión.

6

Acceso sin Contraseña desde Gnome con ssh-agent (Entorno no gráfico):
ssh-agent /bin/bash ssh-add .ssh/id_rsa
  • ssh-agent se ejecuta y la clave privada se añade. En futuras conexiones en la misma sesión, no se solicitará la frase de paso.
Conclusión
En conclusión, la seguridad informática basada en criptografía y certificados digitales desempeña un papel vital en la protección de la información en un entorno digital. Desde la mensajería cifrada hasta la creación de certificados para servidores web y la autenticación segura en SSH, hemos demostrado cómo aplicar prácticamente estas técnicas. Estas prácticas no solo resguardan la confidencialidad y autenticidad de los datos, sino que también contribuyen a la construcción de un entorno digital más seguro y resistente frente a las amenazas cibernéticas.
Made with Gamma