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