Un problema común con el que podemos encontrarnos durante nuestra travesia montando nuestro Home Lab es que nuestras webs figuren como una conexión No segura
.
Esto es debido a que no contamos con un certificado SSL, por decirlo de una manera resumida el certificado SSL es un poco de código en el servidor web que asegura que la conexión sea segura. Cuando la página web contacta a tu servidor, el certificado habilita una conexión encriptada.
Los certificados autofirmados son recomendados para la red local no para servicios públicos.
Generando los Certificados Autofirmados
Generamos una Autoridad de Certificación (CA)
Utilizaremos OpenSSL para generar nuestros certificados.
Viene instalado por defecto en las distribuciones de Linux pero también puede realizarse desde Powershell en Windows.
- Generamos una clave RSA
1
openssl genrsa -aes256 -out ca-key.pem 4096
-aes256
es la encriptación de 256 bits - Generamos un Certificado Público del CA
1
openssl req -new -x509 -sha256 -days 365 -key ca-key.pem -out ca.pem
Como vamos a utilizar el certificado internamente podemos aumentar la validez del certificado.
Generando el Certificado
- Creamos una clave RSA
1
openssl genrsa -out cert-key.pem 4096
- Creamos una Solicitud de Firma de Certificado (CSR)
1
openssl req -new -sha256 -subj "/CN=yourcn" -key cert-key.pem -out cert.csr
Anteriormente el sujeto era importante para la validación pero ya no, así que podemos poner lo que queramos en
"/CN=yourcn"
. - Creamos un archivo
extfile
con los nombres alternativos1 2 3
echo "subjectAltName=DNS:your-dns.record,IP:257.10.10.1" >> extfile.cnf # opcional echo extendedKeyUsage = serverAuth >> extfile.cnf
Aquí ingresamos nuestro DNS e IP a las que queremos validar.
Podemos utilizar wildcards en el DNS tales como *.direccion.
- Creamos el Certificado
1
openssl x509 -req -sha256 -days 365 -in cert.csr -CA ca.pem -CAkey ca-key.pem -out cert.pem -extfile extfile.cnf -CAcreateserial
Nuevamente podemos aumentar la validez del certificado.
1 2
cat cert.pem > fullchaim.pem cat ca.pem >> fullchaim.pem
Creamos un archivo fullchaim que contenga las dos claves que necesitamos.
Formatos de Certificados
Los Certificados X.509 existen en los Formatos Base64 PEM (.pem, .crt, .ca-bundle), PKCS#7 (.p7b, p7s) y Formatos Binarios DER (.der, .cer), PKCS#12 (.pfx, p12).
Conversión de Certificados
COMANDO | CONVERSIÓN |
---|---|
openssl x509 -outform der -in cert.pem -out cert.der | PEM a DER |
openssl x509 -inform der -in cert.der -out cert.pem | DER a PEM |
openssl pkcs12 -in cert.pfx -out cert.pem -nodes | PFX a PEM |
Verificar Certificados
1
openssl verify -CAfile ca.pem -verbose cert.pem
Instalar la Autoridad de Certificación (CA) en root CA
En Debian & Derivados
- Mover el CA (
ca.pem
) en/usr/local/share/ca-certificates/ca.crt
. - Actualizar la librería de certificados con:
1
sudo update-ca-certificates
Para más documentación aquí y aquí.
En Fedora
- Mover el CA (
ca.pem
) en/etc/pki/ca-trust/source/anchors/ca.pem
or/usr/share/pki/ca-trust-source/anchors/ca.pem
- Ahora ejecuta (con sudo si es necesario):
1
update-ca-trust
Para más documentación aquí.
En Arch
System-wide – Arch(p11-kit) (De la wiki de arch)
- Ejecuta (Como root)
1
trust anchor --store myCA.crt
- El certificado será escrito en /etc/ca-certificates/trust-source/myCA.p11-kit y los directorios “legacy” se actualizarán automáticamente.
- Si recibes el error “no configured writable location” o similar, importa el CA manualmente:
- Copia el certificado en el directorio /etc/ca-certificates/trust-source/anchors
- y entonces
1
update-ca-trust
En Windows
Asumiento que el directorio a nuestra Autoridad de Certificacion (CA) es C:\ca.pem
, ejecutamos:
1
Import-Certificate -FilePath "C:\ca.pem" -CertStoreLocation Cert:\LocalMachine\Root
- Cambia
-CertStoreLocation
aCert:\CurrentUser\Root
en caso de que quieras confiar en los certificados solo para el usuario logueado.
O
En la Terminal, ejecuta:
1
certutil.exe -addstore root C:\ca.pem
certutil.exe
es una herramienta integrada que agrega confianza en todo el sistema.
En Android
Los pasos exactos cambian entre dispositivos, aquí va una guía generalizada:
- Abrir las configuraciones
- Ubicar la sección
Encryption and Credentials
Normalmente ubicada enSettings > Security > Encryption and Credentials
- Seleccionar
Install a certificate
- Seleccionar
CA Certificate
- Ubicar el archivo
ca.pem
en la memoria utilizando el administrador de archivos. - Seleccionarlo.
- Listo!
Tengo mi teléfono en inglés así que no se como son las opciones en español.