# 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/ └── / ├── .key.pem # Clave privada del usuario ├── .cert.pem # Certificado S/MIME del usuario └── .p12 # Contenedor PKCS#12 (importar en cliente) ``` ## Generar un certificado S/MIME ```bash ./generar-smime.sh "Nombre Apellido" email@dominio.com contraseña [días] ``` - Se genera una clave RSA de 2048 bits. - El certificado incluye `emailProtection` en 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 ```bash ./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 ```bash sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca/certs/ca.cert.pem ``` O desde la interfaz gráfica: 1. Abrir **Keychain Access** (Llavero). 2. Arrastrar `ca/certs/ca.cert.pem` a la lista de **System** (Sistema). 3. Hacer doble clic en el certificado importado. 4. Desplegar **Trust** (Confianza) y elegir **Always Trust** (Confiar siempre). 5. Cerrar e ingresar contraseña de administrador. ### 2. Importar el certificado S/MIME en Mail.app o Keychain ```bash open usuarios//.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 1. Abrir **Mail > Preferences > Accounts**. 2. Seleccionar la cuenta de correo. 3. Ir a **Account > Signing** y elegir el certificado. 4. 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: ```bash cp ca/certs/ca.cert.pem ~/Sites/ # o cualquier carpeta servida por HTTP ``` Luego abrir `http:///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:** 1. Ir a **Settings > General > About > Certificate Trust Settings**. 2. Activar el interruptor junto al certificado de la AC. ### 2. Instalar el certificado S/MIME personal Opción A — PKCS#12 por AirDrop: Enviar `.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 1. Ir a **Settings > Mail > Accounts**. 2. Seleccionar la cuenta. 3. Tocar **Account > Advanced**. 4. 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.txt` y cambiar el primer carácter de la línea correspondiente de `V` a `R`.