Configuración de OpenSSL

Author
By Darío Rivera
Posted on 2020-10-08 in OpenSSL

Lo primero que debes hacer es crear un archivo preferiblemente en el OPENSSLDIR, pues es allí donde debería estar la configuración por defecto de openssl. Para saber cuál es el directorio por defecto de openssl puedes ejecutar el siguiente comando:

# openssl version -a | grep OPENSSLDIR
OPENSSLDIR: "/usr/lib/ssl"

Configuración para la creación de un CSR

El archivo que vas a crear podría llamarse custom_openssl.cnf. Una vez hecho esto debes definir cuáles son los campos que se preguntarán en la creación de un CSR (Certificate Signing Request). Podrías por ejemplo solictar que en la creación del CSR solamente se pida el país, entonces la mínima configuración que necesitarías sería la siguiente:

[ req ]
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
countryName = Country Name (2 letter code)

Al crear un CSR junto con una llave privada a partir de este archivo  podríamos utilizar el siguiente comando:

sudo openssl req -new -keyout userkey.pem -out usercert-req.pem -config custom_openssl.cnf

Y obtendríamos una salida como la siguiente:

Generating a RSA private key
...........+++++
.............+++++
writing new private key to 'userkey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into 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 blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:CO

Como puedes ver solamente se ha solicitado el país. Al crear el CSR puedes verificar la información a firmar en el Subject con el siguiente comando:

# openssl req -text -in usercert-req.pem  -noout | grep Subject:
Subject: C = CO

Ya que vimos un poco como funciona el proceso de creaciòn de un CSR y los fields necesarios vamos a definir una configuración más completa acerca de qué debería llevar un CSR.

[ req_distinguished_name ]
countryName                    = Country Name (2 letter code)
countryName_default            = CO
countryName_min                = 2
countryName_max                = 2

stateOrProvinceName            = State or Province Name (full name)
localityName                   = Locality Name (eg, city)
organizationalUnitName         = Organizational Unit Name (eg, section)

commonName                     = Common Name (eg, YOUR name)
commonName_max                 = 64

emailAddress                   = Email Address
emailAddress_max               = 40

Al crear un CSR con esta configuración todos estos campos se solicitarán en consola.

-----
Country Name (2 letter code) [CO]:CO
State or Province Name (full name) []:Antioquia
Locality Name (eg, city) []:Medellin
Organizational Unit Name (eg, section) []:Tech
Common Name (eg, YOUR name) []:pleets.org
Email Address []:noreply@pleets.org

Resulta que algunos campos como el nombre de la organización puedes estar más de una vez en una misma solicitud. Es por esto que suele indicarse un número antes de este tipo de campos y te puedes encontrar con lo siguiente:

[ req_distinguished_name ]
0.OrganizationName             = Organization Name (eg, company)

Nota que hemos omitido todos los demás campos por simplicidad. Si quiesieras agregar otro nombre de organización podrías fácilmente hacer lo siguiente:

[ req_distinguished_name ]
0.organizationName             = Organization Name 1 (eg, company)
1.organizationName             = Organization Name 2 (eg, company)

Usualmente no es necesario agregar más de una organización. Si intentas crear un CSR con esta configuración verás algo como los siguiente:

-----
Country Name (2 letter code) [CO]:CO
State or Province Name (full name) []:Antioquia
Locality Name (eg, city) []:Medellin
Organization Name 1 (eg, company) []:Alphabet
Organization Name 2 (eg, company) []:Google
Organizational Unit Name (eg, section) []:Technology
Common Name (eg, YOUR name) []:google.com
Email Address []:noreply@google.com
XXX

Si te ha gustado este artículo puedes invitarme a tomar una taza de café

Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.