====== 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