Diretórios padrão não funcionam no arquivo de configuração OpenSSL

Diretórios padrão não funcionam no arquivo de configuração OpenSSL

Eu configurei o diretório no arquivo /etc/ssl/openssl.cnf, mas toda vez que emito o comando

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

coloca os arquivos no diretório raiz do diretório em que estou trabalhando.

[ 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

Se os diretórios estivessem funcionando, eu deveria esperar isso

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

escrevendo uma nova chave privada em '/home/will/myCA/private/cakey.pem'

Atualizei minha versão do OpenSSL diretamente do site usando os binários e agora está instalada em/etc/local/ssl. Infelizmente ainda não entendo por que os arquivos que estou gerando com OpenSSL não estão sendo classificados em pastas/diretórios.

Alguém sabe por que os diretórios padrão não estão funcionando?

Muito obrigado

Vai

ATUALIZAÇÃO 11:00 30/05/2019

Eu executei o comando

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

mas apenas imprime a chave dentro da janela do terminal e não gera saída para um arquivo.

Eu adicionei -noout ao comando, mas o arquivo foi salvo em ~privkey.pem e não no diretório que defini no arquivo openssl.cnf /home/will/demoCA.

Percebi que o arquivo é salvo no diretório de trabalho em que o terminal está aberto.

usar o comando openssl version -dmostra o local padrão do arquivo de configuração em que defini os diretóriosOPENSSLDIR: "/usr/local/ssl"

Responder1

Os arquivos apontados por [ CA_defaults ]são usados ​​internamente pelo openssl cacomando.

Se você olhar dentro, new_certs_dirverá todos os certificados assinados pela CA ao usar o openssl cacomando, com nomes de arquivos que consistem no número de série do certificado anexado .pem.

Como você está usando, openssl reqesses arquivos não são usados.

A página de manual do reqcomando tem o seguinte a dizer:

-out nome do arquivo

Isso especifica o nome do arquivo de saída para gravação ou a saída padrão por padrão.

Portanto, ele gravará no nome de arquivo fornecido e localizado no diretório a partir do qual você está executando o comando; ou gravará na saída padrão.

-keyout nome do arquivo

Isso fornece o nome do arquivo no qual gravar a chave privada recém-criada. Se esta opção não for especificada, o nome do arquivo presente no arquivo de configuração será usado.

Isto irá gravar no nome do arquivo fornecido, novamente localizado no diretório a partir do qual você está executando o comando; ou escreverá no nome do arquivo fornecido na default_keyfileopção (é [ req ]claro).

Em ambos os casos, você pode fornecer o caminho absoluto para os arquivos em seus comandos se não quiser que eles sejam colocados no diretório atual.


A estrutura que você configurou no .confarquivo funcionará quando você usar o openssl cacomando para assinar uma solicitação de um subordinado (CA ou entidade final). No entanto, para chegar ao estágio em que você pode assinar certificados, ele precisa do certificado CA e da chave instalada. Seu openssl reqcomando gera isso. Para obter valores sensíveis no certificado CA, você precisa adicionar mais ao seu .confarquivo.

Algo semelhante ao seguinte deve começar:

[ 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

Crie o certificado CA com uma versão ligeiramente modificada do seu 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: você só precisa da -configopção se não estiver usando/editando o arquivo de configuração padrão.

Se tudo funcionar, você terá o certificado e a chave corretos para a configuração da CA acima. Antes de poder assinar qualquer certificado com o openssl cacomando, você precisará certificar-se index.txtde que existe e criar serialcom um número de série inicial (como 01).

OpenSSL é o canivete suíço da criptografia, portanto, tem muitas opções. Infelizmente, ler as páginas de manual é a única maneira de entendê-lo.

informação relacionada