Certificado OpenSSL - Configuración de SSL/TLS en servidores

 1. Diferencias entre cert.pem, key.pem, server.crt y server.key

Estos archivos son fundamentales en la configuración de SSL/TLS en servidores. Aquí tienes sus funciones y diferencias:

  • cert.pem o server.crt: Este archivo contiene el certificado público del servidor en formato PEM. Es la "identidad pública" del servidor, usada para demostrar su autenticidad. Un certificado normalmente está firmado por una Autoridad de Certificación (CA) para garantizar su confiabilidad.
  • key.pem o server.key: Este archivo contiene la clave privada del servidor en formato PEM. Es confidencial y se utiliza para descifrar la comunicación cifrada. Este archivo debe protegerse cuidadosamente, ya que su divulgación comprometería la seguridad del servidor.
  • Diferencias:
    • server.crt/cert.pem son certificados públicos que puedes compartir con los clientes.
    • server.key/key.pem son claves privadas que nunca deben compartirse.

2. Propósito del código proporcionado

El código configura SSL/TLS en un servidor. 

init_openssl()

init_openssl() Esta función inicializa la biblioteca OpenSSL y carga algoritmos de cifrado y cadenas de errores. Es el primer paso necesario antes de usar cualquier funcionalidad de OpenSSL.

void init_openssl() {
    SSL_library_init();
    OpenSSL_add_all_algorithms();
    SSL_load_error_strings();
}

create_context()

 create_context() Crea un contexto SSL que define los parámetros de la conexión segura. Utiliza SSLv23_server_method, que permite seleccionar automáticamente el mejor protocolo SSL/TLS disponible.

SSL_CTX *create_context() {
    const SSL_METHOD *method = SSLv23_server_method();
    SSL_CTX *ctx = SSL_CTX_new(method);
    if (!ctx) {
        perror("No se pudo crear el contexto SSL");
        exit(EXIT_FAILURE);
    }
    return ctx;
}

configure_context()

configure_context() Configura el contexto SSL con el certificado y la clave privada:

  • SSL_CTX_use_certificate_file carga el certificado público del servidor (server.crt en este caso).
  • SSL_CTX_use_PrivateKey_file carga la clave privada del servidor (server.key).
void configure_context(SSL_CTX *ctx) {
    SSL_CTX_set_ecdh_auto(ctx, 1);

    // Cargar certificados (ajusta los nombres de archivo según tus archivos locales)
    if (SSL_CTX_use_certificate_file(ctx, "server.crt", SSL_FILETYPE_PEM) <= 0) {
        ERR_print_errors_fp(stderr);
        exit(EXIT_FAILURE);
    }

    if (SSL_CTX_use_PrivateKey_file(ctx, "server.key", SSL_FILETYPE_PEM) <= 0) {
        ERR_print_errors_fp(stderr);
        exit(EXIT_FAILURE);
    }
}

 Estas configuraciones aseguran que el servidor pueda establecer conexiones TLS seguras.

 

Función cleanup_openssl()

Esta función sirve para liberar recursos utilizados por OpenSSL después de que el servidor finaliza su ejecución.

En init_openssl.c:

void cleanup_openssl() {
    EVP_cleanup(); // Limpia los algoritmos de cifrado cargados
    ERR_free_strings(); // Limpia las cadenas de error de OpenSSL
}

 

📌 Resumen del flujo del código completo

  1. Inicialización (init_openssl) Prepara OpenSSL cargando los algoritmos de cifrado y cadenas de error.
  2. Creación del contexto (create_context) Establece un contexto SSL para manejar conexiones seguras.
  3. Configuración del contexto (configure_context) Configura el contexto con el certificado público (server.crt) y la clave privada (server.key).
  4. Limpieza (cleanup_openssl) Libera los recursos de OpenSSL una vez que el servidor ha terminado.

 

Notas finales:

  • Asegúrate de que los archivos server_certificado.crt y server.key sean válidos y estén en la misma carpeta que tu ejecutable, o ajusta las rutas en el código.
  • Si necesitas generar estos archivos para pruebas locales, puedes usar OpenSSL con comandos como:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt 

Esto genera una clave privada (server.key) y un certificado autofirmado (server.crt). 




Leer mas en https://weblinus.com/protocolos-ssl-tls-y-https/ 



Destacado

Bootloader Avanzado en Ensamblador

Bootloader Avanzado en Ensamblador Características del Bootloader Se carga en la dirección 0x7C00 (BIOS). ...