¿Alguna vez has abierto tu web y el navegador te ha avisado de que “la conexión no es privada”? Eso es justo lo que pasa cuando un sitio no tiene un certificado SSL: los datos viajan en claro y nadie se fía. En esta guía te cuento cómo generar unos certificados SSL con OpenSSL y activarlos en tu servidor Apache desde Webmin, para que tu página pase a servirse por HTTPS en el puerto 443. Sin mareos, paso a paso.
¿Qué vamos a conseguir?
- Activar el módulo SSL en Apache desde Webmin.
- Generar un par de ficheros: certificado y clave privada con
openssl. - Configurar la zona virtual de Apache para usar esos certificados y escuchar en el puerto 443.
- Verificar que tu página carga con HTTPS y un candado en el navegador.
- Entender los errores típicos de certificados y cómo solucionarlos.
Prerrequisitos
- Un servidor Linux (Debian/Ubuntu) con Apache instalado y funcionando.
- Webmin instalado y accesible por navegador (
https://localhost:10000/). - Acceso por terminal al servidor con permisos de administrador (
sudo). - Un usuario cliente desde el que comprobar el resultado.
Instala las herramientas que necesitaremos en el servidor:
sudo apt update
sudo apt install openssl apache2
Si no tienes Webmin todavía, puedes instalarlo siguiendo la documentación oficial de Webmin. El resto de la guía asume que ya puedes entrar en
https://localhost:10000/.
Paso 1 — Activar el módulo SSL en Apache
Lo primero es entrar en Webmin desde la máquina servidora y comprobar que Apache está iniciado. La ruta es:
Servidores → Servidor web Apache → Global Configuration → Configuración de módulos Apache

Dentro de la Configuración de módulos Apache localiza la opción SSL y actívala. Una vez activada, verás una opción Enable selected modules (o similar) para confirmar los cambios.

Con el módulo activado, toca generar los certificados. Es hora de abrir una terminal y usar OpenSSL.
Paso 2 — Generar el certificado SSL con OpenSSL
Primero comprobamos que openssl está instalado (si no, lo instalamos con el comando del bloque de prerrequisitos):
openssl version
Ahora creamos una carpeta donde guardar los dos ficheros (certificado y clave). Yo uso la ruta /etc/http:
sudo mkdir /etc/http
cd /etc/http
Dentro, ejecutamos el comando que genera la pareja de certificados. Este comando crea un par de claves RSA y un certificado X.509 autofirmado de forma simultánea:
sudo openssl req -newkey rsa:2048 -x509 -nodes -out cert.pem -keyout key.pem

Te preguntará por una serie de datos (país, provincia, nombre de la organización, etc.). Rellénalos o pulsa Enter para dejarlos en blanco. Para un tutorial de pruebas dan igual; para producción deben ser reales.
Explicación de las opciones importantes
-newkey rsa:2048: genera una clave privada RSA de 2048 bits (recomendada; en el ejemplo original era 512, demasiado débil hoy).-x509: emite directamente un certificado en lugar de una petición de firma (CSR).-nodes: “no DES”, es decir, no protege la clave con contraseña, así Apache puede leerla sin pedirla en cada reinicio.-out cert.pem: el fichero del certificado público.-keyout key.pem: el fichero de la clave privada.
Dar permisos a los ficheros
Después, damos los permisos correctos para que el servicio web pueda leer los ficheros:
sudo chmod 644 cert.pem
sudo chmod 600 key.pem
El original usaba
chmod +xyrsa:512. Con 512 bits el cifrado es trivial de romper hoy en día: usa al menos 2048. Y para los ficheros de un certificado lo que importa no es el ejecutable, sino los permisos de lectura.
Verificar que se crearon
Podemos comprobar que los dos ficheros están creados listando la carpeta:
ls -l /etc/http
Deberías ver cert.pem y key.pem. Con esto, ya tenemos nuestra pareja de certificados.
Paso 3 — Configurar la Zona Virtual con SSL en Webmin
Volvemos a Webmin → Servidor web Apache. Localiza tu zona virtual (Virtual Host) y entra en ella. Dentro, busca la sección Opciones SSL:

En Opciones SSL rellena los dos campos con las rutas absolutas de nuestros ficheros:
- Archivo de certificado / clave pública:
/etc/http/cert.pem - Archivo de clave privada:
/etc/http/key.pem
Configurar el puerto 443
Ahora configuramos el puerto para que Apache escuche en el 443 (el puerto estándar de HTTPS):

Guarda los cambios y aplica/reinicia Apache desde Webmin o desde la terminal:
sudo systemctl restart apache2
sudo systemctl status apache2
Paso 4 — Comprobar que funciona
Desde el equipo cliente abre el navegador y ve a tu sitio usando HTTPS:
https://192.168.101.1

Como el certificado es autofirmado, el navegador te avisará de que “la conexión no es privada”. Esto es esperable y correcto: el navegador no puede verificar que el certificado lo ha firmado una autoridad de confianza (CA). Para acceder en un entorno de pruebas, haz clic en Avanzado → Continuar / entender los riesgos (o “make an exception”):

Al hacer la excepción, ya podrás entrar en la página. Verás el candado en la barra de direcciones indicando que la conexión está cifrada.
Verificar desde terminal
También puedes verificar el certificado con curl:
curl -vk https://192.168.101.1
Y comprobar que Apache escucha en el 443:
ss -tlnp | grep :443
Errores comunes
| Error | Causa | Solución |
|---|---|---|
SSL received a record that exceeded the maximum permissible length | Apache no está escuchando en 443 con SSL | Activa el módulo y configura el puerto 443 en la zona virtual |
| Aviso “la conexión no es privada” | Certificado autofirmado (sin CA de confianza) | Normal en pruebas: haz la excepción. Para producción usa una CA |
| Apache no arranca tras configurar SSL | Rutas incorrectas de cert.pem/key.pem o permisos | Revisa las rutas absolutas en Webmin y los permisos 644/600 |
| Se pide contraseña al reiniciar Apache | La clave privada está cifrada (sin -nodes) | Regenera la clave con -nodes |
| Página carga por HTTP pero no por HTTPS | Redirección o puerto mal configurado | Verifica ss -tlnp | grep :443 y que el navegador use https:// |
| El navegador rechaza la clave (4096/512 bits) | Clave demasiado débil o antigua | Regenera con rsa:2048 o superior |
Siguiente nivel
- Certificado autofirmado no basta para internet real — para un dominio público usa un certificado gratuito y válido de Let’s Encrypt con certbot, que además se renueva solo.
- Protege carpetas con contraseña en Apache/Webmin para restringir zonas privadas: Cómo proteger una carpeta con contraseña en Webmin.
- Asegura el acceso remoto a tu servidor con SSH y claves: Formas de conectarse por SSH y Conexión SSH mediante clave pública privada.
- Monta tu propio panel de control con Webmin para gestionar Apache, certificados y más servicios sin tocar la terminal.
