Creación de una Autoridad Certificadora en Centos 7

Se crean los directorios necesarios para la creación de la CA y firmar los certificados .

mkdir/etc/httpd/ssl/daw

mkdir -m 0755 /etc/httpd/ssl/daw/CA

mkdir -m 0755 /etc/httpd/ssl/daw/CA/certificados

mkdir -m 0755 /etc/httpd/ssl/daw/CA/privado

mkdir -m 0755 /etc/httpd/ssl/daw/CA/crl

mkdir -m 0755 /etc/httpd/ssl/daw/CA/nuevoscert

cd /etc/httpd/ssl/daw/CA

CA” será el directorio de trabajo de la autoridad certificadora. “certs” directorio donde se ubicarán los certificados. “new_certs_dir” directorio donde openssl pone los certificados creados en formato PEM (sin encriptar) y en la forma [n° de serie].pem (por ejemplo: 15.pem). ” crl_dir ” es el directorio donde se coloca la lista de revocación de certificados. “private_key” es el directorio donde se colocan las claves privadas (este directorio con permisos restrictivos, sólo leídos por root).

pwd

/etc/httpd/ssl/daw/CA

Las extensiones de archivos que se genera en estos directorios son las siguientes:

  • .key: clave privada (deben tener permisos restrictivos)
  • .csr: (Certificate Signing Request) solicitud de certificado firmado por una CA (una vez recibido el certificado se puede eliminar). Consiste principalmente la clave pública de un par de claves e información adicional. Ambos componentes se insertan en el certificado cuando se firma.
  • .crt: certificado (puede ser distribuido públicamente)
  • .pem: archivos que contienen tanto el certificado como la clave privada (deben tener permisos restrictivos)
  • .crl: lista de revocación de certificados (puede ser públicamente distribuida)

Para la configuración inicial, se copia el archivo de configuración por defecto de openssl (openssl.cnf) al directorio /CA.

cp /etc/pki/tls/openssl.cnf /etc/httpd/ssl/daw/CA/daw.cnf

chmod 0600 /CA/daw.cnf

Debido a que utilizamos un directorio personalizado para los certificados, se necesitan algunas modificaciones en el archivo /CA/openssl.cnf, el cual debe quedar así:

dir = /etc/httpd/ssl/daw/CA # Where everything is kept
certs = $dir/certificados # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to ‘no’ to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/nuevoscerts # default place for new certs.
certificate = $dir/certificados/dawCA.crt # The CA certificate
serial = $dir/serial # The current serial numbercrl
number = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/privado/dawCA.key # The private key
RANDFILE = $dir/privado/.rand # private random number file

Se crean dos archivos que funcionan como bases de datos para openssl:

touch index.txt

Crear el archivo serial con el valor 01:

echo ‘01’ >> serial

Luego de terminar la configuración inicial, podemos crear un certificado autofirmado que será utilizado como el certificado de nuestra CA. Este será utilizado para firmar los pedidos de certificados.

Los certificados que se generan con esta configuración, son certificados de propósito general y su uso no se restringe sólo a autenticación de servidores. Las claves privadas no serán protegidas por contraseña, para que cuando los servicios se reinicien no soliciten la contraseña. Aunque se podría generar con contraseña, pero se debería crear un fichero oculto donde almacenarlas para evitar el contratiempo mencionado. Esto implica que se debe restringir cuidadosamente el acceso de lectura sobre las claves privadas, para que sólo el usuario root, o el usuario privilegiado utilizado por los servicios, pueda leer estos archivos.

Para proceder con la creación de un certificado para un servidor, lo primero que hacemos es generar el pedido de certificado:

Se crea la autoridad certificadora.

El primer paso es crear la clave raíz privada. Se asignar permisos muy restrictivos. Ésta es la base de toda confianza para los certificados, y si alguien obtiene una copia, podría generar certificados que acepte el navegador. También se puede crear una clave que esté protegida mediante una contraseña añadiendo -des3:

openssl genrsa -out privado/dawCA.key 2048 -des3

Generating RSA private key, 2048 bit long modulus…..+++…..+++e is 65537 (0x10001)

Se restringen los permisos de la clave.

chmod 0400 privado/dawCA.key

Se crea el certificado.

openssl req -x509 -config daw.cnf -nodes -key privado /dawCA.key -out certificados/dawCA.es.crt

You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:ES
State or Province Name (full name) []:PO
Locality Name (eg, city) [Default City]:VI
Organization Name (eg, company) [Default Company Ltd]:EDU1
Organizational Unit Name (eg, section) []:EDU1
Common Name (eg, your name or your server’s hostname) []:daw.iesteis.es
Email Address []:adminiesteis.es

Se verifica el certificado:

openssl x509 -subject -issuer -enddate -noout -in certificados/dawCA.crt

subject= /C=ES/ST=PO/L=VI/O=IES/OU=IES/CN=iesteis.es/emailAddress=admin@iesteis.
esissuer= /C=ES/ST=PO/L=VI/O=IES/OU=IES/CN=iesteis.es/emailAddress=admin@iesteis.es
notAfter=Feb 26 21:44:06 2018 GMT

openssl x509 -in certificados/dawCA.crt -noout -text

Certificate:
Data:
Version: 3 (0x2)
Serial Number: a0:a0:96:e1:3f:4b:da:94
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=ES, ST=PO, L=VI, O=IES, OU=IES, CN=iesteis.es/emailAddress=admin@iesteis.es
Validity
Not Before: Jan 27 21:44:06 2018 GMT
Not After : Feb 26 21:44:06 2018 GMT
Subject: C=ES, ST=PO, L=VI, O=IES, OU=IES, CN=iesteis.es/emailAddress=admin@iesteis.es
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus: 00:df:c2:43:3f:23:15:0f:68:3e:c5:46:40:a7:bc: e8:a5
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:

Se crea el certificado para el dominio daw.iesteis.es

Se crea la clave.

openssl genrsa -out privado/daw.es.key 2048

Generating RSA private key, 2048 bit long modulus……………+++………….+++e is 65537 (0x10001)

Se crea la petición de certificado para el dominio daw.iesteis.es.

openssl req -x509 -config daw.cnf -nodes -key privado/daw.es.key -out certificados/daw.es.csr -days 365

You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:ES
State or Province Name (full name) []:PO
Locality Name (eg, city) [Default City]:VI
Organization Name (eg, company) [Default Company Ltd]:iesteis
Organizational Unit Name (eg, section) []:iesteis
Common Name (eg, your name or your server’s hostname) []:daw.iesteis.es
Email Address []:daw@iesteis.es
Please enter the following ‘extra’ attributesto be sent with your certificate requestA challenge password []:****
An optional company name []:

A continuación se solicita el certificado a la autoridad creada anteriormente. Para firmar el pedido se debe proveer del certificado de la CA. La opción “-policy policy_anything” indica que no se requiere que los campos “Country“, “State” o “City” coincidan con los de la CA.

openssl ca -config daw.cnf -policy policy_anything -out certificados/daw.es.crt -infiles certificados/daw.es.csr

Using configuration from daw.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity:
Not Before: Jan 27 22:05:18 2018 GMT
Not After : Jan 27 22:05:18 2019 GMT
Subject:
countryName = ES
stateOrProvinceName = PO
localityName = VI
organizationName = EDU1
organizationalUnitName = EDU1_1
commonName = daw.iesteis.es
emailAddress = daw@iesteis.es
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
24:54:0F:7B:27:27:53:2B:10:EF:30:0F:EB:F3:E0:5D:9B:42:51:44
X509v3 Authority Key Identifier:
keyid:E0:DF:88:91:A0:0A:05:D8:4D:6D:9B:7E:18:2A:F1:77:BD:7E:AB:32 Certificate is to be
certified until Jan 27 22:05:18 2019 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entriesData Base Updated

Para verificar el certificado es posible obtener información del certificado con el siguiente comando:

openssl -subject -issuer -enddate -noout -in certificados/daw.es.crt

subject= /C=ES/ST=PO/L=VI/O=EDU1/OU=EDU1_1/CN=daw.iesteis.es/emailAddress=daw@iesteis.
esissuer= /C=ES/ST=PO/L=VI/O=IES/OU=IES/CN=iesteis.es
/emailAddress=admin@iesteis.es
notAfter=Jan 27 22:05:18 2019 GMT

Y para verificar que el certificado sea válido para autenticación de servidores se utiliza el siguiente:

openssl verify -purpose sslserver -CAfile certificados/dawCA.crt certificados/daw.es.crt

certificados/daw.es.crt: OK

Algunos servidores o aplicaciones requieren que el certificado y la clave privada existan en el mismo archivo. Esto se puede lograr con el comando:

cat certificados/daw.es.crt privado/daw.es.key > privado/daw.es-key-cert.pem

Se debe restringir el acceso al archivo .pem resultante y borrar daw.es y daw.es si no son necesarios.

Se puede revocar un certificado de la siguiente manera:

openssl ca -config daw.cnf -revoke certificados/daw.es.crt

A continuación se debe generar un nueva CRL (Certificate Revokation List):

openssl ca -config DAW.cnf -gencrl -out crl/ca.crl

El certificado de la CA y su lista de revocación (CRL) deben ser distribuidos a aquellos que confíen en esta CA para que puedan importarlos en el software cliente (web browser, clientes ftp, clientes de e-mail, etc. Además la CRL debe ser pública.

Comprobación en un cliente.

 

REFERENCIAS:
http://magmax.org/blog/creando-tu-propia-entidad-certificadora-ssl/
https://waytoit.wordpress.com/2014/02/11/ssl-creando-una-entidad-certificadora/
https://www.ayudamelinux.es/crear-una-entidad-certificadora-ca-con-openssl/
https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-apache-for-centos-7
https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs
https://www.linuxito.com/gnu-linux/nivel-alto/26-como-crear-tu-propia-autoridad-certificante-ca
https://www.suse.com/documentation/sles10/book_sle_reference/data/sec_apache2_ssl.html

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s