====== Autoridad de Certificación ====== ===== Instalar ===== apt-get install openssl ===== Configurar CA ===== El archivo /etc/ssl/openssl.cnf viene pre-configurado para generar una Autoridad de Certificación (**demoCA**), por lo que se hace uso de la configuración: cd /etc/ssl mkdir demoCA mkdir demoCA/certs # Where the issued certs are kept mkdir demoCA/crl # Where the issued crl are kept mkdir demoCA/private # The private key $dir/private/cakey.pem mkdir demoCA/newcerts # default place for new certs echo 01 > demoCA/serial # The current serial number echo 01 > demoCA/crlnumber # the current crl number echo 01 > demoCA/index.txt # database index file :!: Se tocan los **default** del archivo /etc/ssl/openssl.conf para la creación de certificados y no contestar cada vez: vim /etc/ssl/openssl.cnf countryName_default = UY stateOrProvinceName_default = Montevideo localityName_default = Montevideo <- agregar 0.organizationName_default = Fosforito S.A. organizationalUnitName_default = Dpto. Seguridad ==== 1. Crear certificados CA ==== Generar certificado privado (//rootCA//) de 4096 rsa (//genrsa//) y clave (//-des3//): openssl genrsa -out demoCA/private/cakey.pem -des3 4096 Crear un certificado público auto-firmado de la rootCA que se necesita para dar identidad a la CA: openssl req -new -x509 -days 1826 -key demoCA/private/cakey.pem -out demoCA/cacrt.pem Common Name (e.g. server FQDN or YOUR name) []:CA se le otorgan 1826 días (5 años) de validez. openssl req -nodes -new -x509 -keyout demoCA/private/cakey.pem -out demoCA/cacert.pem -days 365 La autoridad de certificación ya está preparada para funcionar, pues tiene sus certificados raiz. El certificado público **/etc/ssl/demoCA/cacert.pem** puede ser disponibilizado e importado dentro de los certificados de las diferentes aplicaciones. ===== Generación de certificados de "clientes" ===== Una vez configurada la CA ya puede empezar a recibir certificados a ser firmados. ==== 2. Generar certificado privado (KEY) + CSR para firmar ==== Esta tarea se realiza en **host cliente**, aunque en ambientes controlados se puede realizar en el servidor openssl req -nodes -new -keyout server.key -out server.csr Common Name (e.g. server FQDN or YOUR name) []:www.example.com en caso de haber sido creado en host cliente, se debe enviar /etc/ssl/server.csr al **host CA** para ser firmado. ==== 3. Firmar CSR por la CA y generar certificado público (CRT) ==== openssl ca -in server.csr -out demoCA/newcerts/server.crt Operación de firmado: Sign the certificate? [y/n]:y Operación de alta en la base CA: 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated ==== 4. Enviar al cliente los certificados generados ==== Se deben enviar al cliente: * /etc/ssl/demoCA/newcerts/server.crt -> certificado público firmado del cliente * /etc/ssl/demoCA/cacert.pem -> público de la CA * /etc/ssl/server.key -> **solo si fue generado en el servidor** el certificado privado del cliente ===== Probar otra opción ===== I don't know of any "don't bother" options, but here is how you can setup a quick demo CA: #!/bin/bash CAROOT=/root/miCA mkdir -p ${CAROOT}/ca.db.certs # Signed certificates storage touch ${CAROOT}/ca.db.index # Index of signed certificates echo 01 > ${CAROOT}/ca.db.serial # Next (sequential) serial number # Configuration cat>${CAROOT}/ca.conf<<'EOF' [ ca ] default_ca = ca_default [ ca_default ] dir = REPLACE_LATER certs = $dir new_certs_dir = $dir/ca.db.certs database = $dir/ca.db.index serial = $dir/ca.db.serial RANDFILE = $dir/ca.db.rand certificate = $dir/ca.crt private_key = $dir/ca.key default_days = 365 default_crl_days = 30 default_md = md5 preserve = no policy = generic_policy [ generic_policy ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional EOF sed -i "s|REPLACE_LATER|${CAROOT}|" ${CAROOT}/ca.conf cd ${CAROOT} # Generate CA private key openssl genrsa -out ca.key 1024 # Create Certificate Signing Request openssl req -new -key ca.key \ -out ca.csr # Create self-signed certificate openssl x509 -req -days 10000 \ -in ca.csr \ -out ca.crt \ -signkey ca.key Now you can generate and sign keys: # Create private/public key pair openssl genrsa -out server.key 1024 # Create Certificate Signing Request openssl req -new -key server.key \ -out server.csr # Sign key # openssl ca -config miCA/ca.conf \ -in server.csr \ -cert miCA/ca.crt \ -keyfile miCA/ca.key \ -out server.crt