| ca | ||
| usuarios | ||
| ca.cnf | ||
| generar-smime.sh | ||
| README.md | ||
| smime.cnf | ||
Autoridad Certificadora S/MIME
AC propia para generar certificados S/MIME para firmar y cifrar correos electrónicos.
Estructura
.
├── ca.cnf # Configuración de la AC
├── smime.cnf # Configuración para certificados S/MIME
├── generar-smime.sh # Script para generar certificados
├── ca/
│ ├── private/
│ │ └── ca.key.pem # Clave privada de la AC (no compartir)
│ └── certs/
│ └── ca.cert.pem # Certificado raíz (instalar en cada cliente)
└── usuarios/
└── <email>/
├── <email>.key.pem # Clave privada del usuario
├── <email>.cert.pem # Certificado S/MIME del usuario
└── <email>.p12 # Contenedor PKCS#12 (importar en cliente)
Generar un certificado S/MIME
./generar-smime.sh "Nombre Apellido" email@dominio.com contraseña [días]
- Se genera una clave RSA de 2048 bits.
- El certificado incluye
emailProtectionen Extended Key Usage y el email en Subject Alternative Name. - Validez por defecto: 365 días.
- El CSR se elimina automáticamente tras firmar.
Ejemplo
./generar-smime.sh "Juan Pérez" juan@example.com MiClaveSegura 730
Produce usuarios/juan@example.com/juan@example.com.p12.
Generación de contraseñas.
1. GPG
gpg --gen-random --armor 1 32
2. openssl
openssl rand -base64 32
3. apg
apg
4. date
date +%s | sha256sum | base64 | head -c 32 ; echo
5. urandom
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;
6. tr
tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1
7. strings
strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo
Cualquiera de los métodos anteriores genera una contraseña segura. La idea es generar primero la contraseña y luego invocar a la shell script para generar el certificado.
Instalación en macOS
1. Instalar el certificado raíz de la AC como Autoridad de Confianza
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca/certs/ca.cert.pem
O desde la interfaz gráfica:
- Abrir Keychain Access (Llavero).
- Arrastrar
ca/certs/ca.cert.pema la lista de System (Sistema). - Hacer doble clic en el certificado importado.
- Desplegar Trust (Confianza) y elegir Always Trust (Confiar siempre).
- Cerrar e ingresar contraseña de administrador.
2. Importar el certificado S/MIME en Mail.app o Keychain
open usuarios/<email>/<email>.p12
Esto abre Keychain Access. Ingresar la contraseña del PKCS#12. El certificado quedará disponible en login (inicio de sesión) para usar con Mail.app.
3. Configurar Mail.app
- Abrir Mail > Preferences > Accounts.
- Seleccionar la cuenta de correo.
- Ir a Account > Signing y elegir el certificado.
- En Encryption elegir el mismo certificado.
Al redactar un correo aparecerán los iconos de firma y cifrado.
Instalación en iOS (iPhone / iPad)
1. Instalar el certificado raíz de la AC
Opción A — Servidor web:
cp ca/certs/ca.cert.pem ~/Sites/ # o cualquier carpeta servida por HTTP
Luego abrir http://<ip>/ca.cert.pem en Safari en el dispositivo iOS. Safari ofrecerá Download Profile. Aceptar.
Opción B — AirDrop:
Enviar ca/certs/ca.cert.pem por AirDrop desde un Mac al dispositivo. Al recibirlo aparecerá la opción de instalar el perfil.
Activar confianza:
- Ir a Settings > General > About > Certificate Trust Settings.
- Activar el interruptor junto al certificado de la AC.
2. Instalar el certificado S/MIME personal
Opción A — PKCS#12 por AirDrop:
Enviar <email>.p12 por AirDrop al dispositivo. Al recibirlo aparecerá Install Profile → ingresar la contraseña del PKCS#12 → Install.
Opción B — PKCS#12 por correo:
Enviarse el .p12 como adjunto a sí mismo, abrirlo en el dispositivo e instalar el perfil.
3. Configurar Mail.app en iOS
- Ir a Settings > Mail > Accounts.
- Seleccionar la cuenta.
- Tocar Account > Advanced.
- En S/MIME activar Sign y/o Encrypt y seleccionar el certificado.
Notas
- El certificado raíz debe instalarse como Autoridad de Confianza en cada dispositivo. Sin esto, los certificados firmados se marcarán como no confiables.
- La clave privada de la AC (
ca/private/ca.key.pem) es sensible. Considérenla como una contraseña maestra. - Para revocar un certificado, abrir
ca/index.txty cambiar el primer carácter de la línea correspondiente deVaR.