openssl “incapaz de encontrar 'distinguished_name' na configuração”

27

Eu recebo o seguinte erro de openssl req :

unable to find 'distinguished_name' in config
problems making Certificate Request
41035:error:0E06D06C:configuration file routines:NCONF_get_string:no value:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/crypto/conf/conf_lib.c:329:group=req name=distinguished_name

Meu entendimento é que este é o "Assunto" que ele não pode encontrar ... no entanto, eu sou especificando que:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=ACME, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

A única sugestão do manual é que o arquivo de configuração não existe; Eu posso cat "$OPTIONS_FILE" , então é definitivamente lá, e o erro não é precedido pelo erro que o manual observa que seria precedido por se este fosse o caso, então eu tenho certeza que openssl vê o arquivo de configuração. / p>

Meu arquivo de configuração contém o seguinte:

[req]
req_extensions = v3_req

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.example.com 

… o que é basicamente literalmente o exemplo nos documentos .

O que estou fazendo de errado aqui?

    
por Thanatos 29.07.2015 / 20:15

4 respostas

20

Por mais que eu possa dizer , -config está sobrescrevendo algum tipo de configuração interna; Se você ver a seção "EXEMPLOS" para a página de manual do openssl req , mostra um exemplo de arquivo de configuração com distinguished_name nele. Em um palpite, adicionei o seguinte à minha configuração:

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

Assim, toda a minha configuração parecia algo como

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[req_distinguished_name]

[v3_req]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.${DOMAIN}

(Observe que aqui, ${DOMAIN} não é literal; você deve substituí-lo pelo seu nome de domínio DNS; eu crio este arquivo em um script bash com cat >"$OPTIONS_FILE" <<EOF , seguido pelo acima, seguido por EOF )

openssl req … -subj <my subject> -config <that file> … então pegou meu assunto da linha de comando. Para os interessados, todo o comando acabou parecendo:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=My Company, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

A partir desta postagem, meu entendimento é que o SHA-1 está obsoleto¹ para certificados X. 509, portanto -sha256 (que é um sinalizador não documentado…) e subjectAltName está se tornando necessário², daí a necessidade da configuração. A única pegadinha adicional que conheço para gerar um CSR de melhor prática é que você deve usar um tamanho de chave RSA de pelo menos 2048 bits (se você estiver usando RSA, que eu sou); você deve especificar o tamanho para o comando openssl genrsa , já que o padrão atual é inseguro.

¹ Embora não esteja quebrado no momento em que estou escrevendo isso, as pessoas acham que é apenas uma questão de tempo. Consulte "Diminuir gradualmente o SHA1"
²Usando CN para o nome de domínio não é mais recomendado; Não tenho certeza quando / se os navegadores estão planejando descartar isso. "Afaste-se de incluir e verificar strings que se parecem com nomes de domínio no Nome Comum do assunto.", RFC 6125
Nota: Estou menos certo sobre o valor "correto" de keyUsage .

    
por 29.07.2015 / 20:47
8

Eu tive o mesmo problema e encontrei a resposta aqui:

link

O arquivo de configuração é assim:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = www.company.net 
DNS.4 = company.net 

E então:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr
    
por 26.08.2016 / 19:14
3

Para mim, esse erro parece ter sido causado pela criação incorreta do caminho ao executar o comando no Windows Server 2012, C:\OpenSSL-Win32\bin

openssl req -new -sha256 -key private.pem -out example.csr

que geram um erro sem bloqueio antes de solicitar o pass share:

Can't open C:\Program Files (x86)\Common Files\SSL/openssl.cnf for reading, No s uch file or directory

É evidente que o caminho é inválido devido à barra errada, portanto, o arquivo de configuração deve ser explicitamente anexado na linha de comando:

openssl req -new -sha256 -key private.pem -config openssl.cfg -out example.csr
    
por 17.12.2016 / 18:43
1

Este erro semelhante:

$ openssl req -x509 -newkey rsa:4096 -keyout _key.pem -out cert.pem -days 365 -nodes 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) [AU]:problems making Certificate Request

(Ubuntu 17.04) significava "você precisa adicionar

-subj "/C=US/ST=California/L=San Francis co/O=ACME, Inc./CN=*.*.$DOMAIN/"

para a linha de comando "FWIW.

    
por 27.08.2017 / 07:44

Tags