apt-get install openssl
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
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.
Una vez configurada la CA ya puede empezar a recibir certificados a ser firmados.
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.
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
Se deben enviar al cliente:
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