Tabla de Contenidos

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:

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