Los directorios predeterminados no funcionan en el archivo de configuración OpenSSL

Los directorios predeterminados no funcionan en el archivo de configuración OpenSSL

He configurado el directorio en el archivo /etc/ssl/openssl.cnf pero cada vez que emito el comando

openssl req -x509 -newkey rsa:4096 -keyout cakey.pem -out cacert.pem -days 3650

coloca los archivos en el directorio raíz del directorio en el que estoy trabajando.

[ CA_default ]

dir     = /home/will/myCA   # Where everything is kept
certs       = $dir/certs        # 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 certs with same subject.
new_certs_dir   = $dir/newcerts     # default place for new certs.

certificate = $dir/cacert.pem   # The CA certificate
serial      = $dir/serial       # The current serial number
crlnumber   = $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/private/cakey.pem# The private key
RANDFILE    = $dir/private/.rand    # private random number file

x509_extensions = usr_cert      # The extensions to add to the cert

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt    = ca_default        # Subject Name options
cert_opt    = ca_default        # Certificate field options

# Extension copying option: use with caution.
# copy_extensions = copy

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions    = crl_ext

default_days    = 365           # how long to certify for
default_crl_days= 30            # how long before next CRL
default_md  = default       # use public key default MD
preserve    = no            # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy      = policy_match

Si los directorios estuvieran funcionando, debería esperar esto.

Generating a 2048 bit RSA private key
.................................+++
.................................................................................................+++
writing new private key to '/home/will/myCA/private/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----

escribiendo una nueva clave privada en '/home/will/myCA/private/cakey.pem'

Actualicé mi versión de OpenSSL directamente desde el sitio web usando los binarios y ahora está instalado en /etc/local/ssl. Desafortunadamente, todavía no entiendo por qué los archivos que estoy generando con OpenSSL no se ordenan en carpetas/directorios.

¿Alguien sabe por qué los directorios predeterminados no funcionan?

Muchas gracias

Voluntad

ACTUALIZACIÓN 11:00 30/05/2019

He ejecutado el comando

openssl req -x509 -newkey rsa:4096 -days 3650

pero simplemente imprime la clave dentro de la ventana del terminal y no la genera en un archivo.

Agregué -noout al comando pero el archivo se guardó en ~privkey.pem y no en el directorio que configuré en el archivo openssl.cnf /home/will/demoCA.

He notado que el archivo se guarda en el directorio de trabajo en el que está abierto el terminal.

El uso del comando openssl version -dmuestra la ubicación predeterminada del archivo de configuración en el que configuro los directorios.OPENSSLDIR: "/usr/local/ssl"

Respuesta1

Los archivos a los que apunta [ CA_defaults ]son utilizados internamente por el openssl cacomando.

Si mira dentro, new_certs_dirverá todos los certificados firmados por la CA cuando usa el openssl cacomando, con nombres de archivos que consisten en el número de serie del certificado .pemadjunto.

Mientras estás usando openssl reqesos archivos no se usan.

La página de manual del reqcomando tiene esto que decir:

-salida nombre de archivo

Esto especifica el nombre del archivo de salida para escribir o la salida estándar de forma predeterminada.

Por lo tanto, escribirá en el nombre de archivo proporcionado y ubicado en el directorio desde el que ejecuta el comando; o escribirá en la salida estándar.

-keyout nombre de archivo

Esto proporciona el nombre del archivo en el que escribir la clave privada recién creada. Si no se especifica esta opción, se utiliza el nombre de archivo presente en el archivo de configuración.

Esto escribirá en el nombre de archivo proporcionado, nuevamente ubicado en el directorio desde el cual está ejecutando el comando; o escribirá en el nombre de archivo indicado en la default_keyfileopción (en, [ req ]por supuesto).

En ambos casos, puede proporcionar la ruta absoluta a los archivos en sus comandos si no desea que se coloquen en el directorio actual.


La estructura que ha configurado en el .confarchivo funcionará cuando use el openssl cacomando para firmar una solicitud de un subordinado (CA o entidad final). Sin embargo, para llegar a la etapa en la que puede firmar certificados, necesita el certificado de CA y la clave en su lugar. Tu openssl reqcomando los genera. Para obtener valores razonables en el certificado de CA, debe agregar más a su .confarchivo.

Algo similar a lo siguiente debería ayudarte a comenzar:

[ req ]

# Don't prompt for the DN, use configured values instead
# This saves having to type in your DN each time.

prompt             = no
string_mask        = default
distinguished_name = req_dn

# The size of the keys in bits:
default_bits       = 4096

[ req_dn ]

countryName            = GB
stateOrProvinceName    = Somewhere
organizationName       = Example
organizationalUnitName = PKI
commonName             = Example Test Root CA

[ ca_ext ]

# Extensions added to the request

basicConstraints =  critical, CA:TRUE
keyUsage =          critical, keyCertSign, cRLSign

Cree el certificado de CA con una versión ligeramente modificada de su comando anterior:

openssl req -x509 -newkey rsa:4096 -keyout /home/will/myCA/private/cakey.pem -out /home/will/myCA/cacert.pem -days 3650 -nodes -config <path-to>/openssl.cnf -extensions ca_ext

Nota: solo necesita la -configopción si no está usando/editando el archivo de configuración predeterminado.

Si todo funciona, tendrá el certificado y la clave correctos para su configuración de CA anterior. Antes de poder firmar cualquier certificado con el openssl cacomando, deberá asegurarse de index.txtque exista y crearlo serialcon un número de serie inicial (como 01).

OpenSSL es la navaja suiza de las criptomonedas, por lo que tiene muchas opciones. Desafortunadamente, leer las páginas de manual es la única forma de entenderlo.

información relacionada