![Diretórios padrão não funcionam no arquivo de configuração OpenSSL](https://rvso.com/image/154454/Diret%C3%B3rios%20padr%C3%A3o%20n%C3%A3o%20funcionam%20no%20arquivo%20de%20configura%C3%A7%C3%A3o%20OpenSSL.png)
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 -d
mostra 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 ca
comando.
Se você olhar dentro, new_certs_dir
verá todos os certificados assinados pela CA ao usar o openssl ca
comando, com nomes de arquivos que consistem no número de série do certificado anexado .pem
.
Como você está usando, openssl req
esses arquivos não são usados.
A página de manual do req
comando 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_keyfile
opçã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 .conf
arquivo funcionará quando você usar o openssl ca
comando 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 req
comando gera isso. Para obter valores sensíveis no certificado CA, você precisa adicionar mais ao seu .conf
arquivo.
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 -config
opçã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 ca
comando, você precisará certificar-se index.txt
de que existe e criar serial
com 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.