openssl "incapaz de encontrar 'distinguished_name' na configuração"

40

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 consegue encontrar ... no entanto, estou 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 exista; eu possocat "$OPTIONS_FILE" , então está definitivamente lá, e o erro não é precedido pelo erro que o manual observa que seria precedido se fosse esse o caso, por isso tenho certeza que opensslvê o arquivo de configuração.

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 é praticamente o exemplo dos documentos .

O que eu estou fazendo errado aqui?

Thanatos
fonte
11
Nota secundária: o subjectAltName especificado aqui *.*.example.com, é inválido. (Você pode ter apenas 1 *e apenas no componente mais à esquerda.) Isso não está relacionado ao problema aqui, mas não c / p cegamente.
Thanatos

Respostas:

30

Perto do que sei , -configestá substituindo algum tipo de configuração interna; se você vir a seção "EXEMPLES" da página de manual do openssl req , ela mostra um exemplo de um arquivo de configuração distinguished_name. 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 esse arquivo em um bashscript com cat >"$OPTIONS_FILE" <<EOF, seguido pelo acima, seguido por EOF)

openssl req … -subj <my subject> -config <that file> …então peguei meu assunto na linha de comando. Para os interessados, o comando inteiro 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"

No momento desta publicação, 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 obrigatório², daí a necessidade da configuração. A única dica adicional que eu conheço para gerar um CSR de melhor prática para o acima é que você deve usar um tamanho de chave RSA de pelo menos 2048 bits (se você estiver usando RSA, o que eu sou); você deve especificar o tamanho para oopenssl genrsa comando, pois o padrão atual é inseguro.

Ile Embora não esteja quebrado no momento em que escrevo isso, as pessoas sentem que é apenas uma questão de tempo. Consulte "
Pôr gradualmente o SHA1" ²O uso de CN para o nome de domínio não é mais recomendado; Não tenho certeza de quando / se os navegadores planejam descontinuar isso. "Afaste-se de incluir e verificar seqüências de caracteres que se parecem com nomes de domínio no Nome comum do assunto.", RFC 6125
Nota: Tenho menos certeza sobre o valor "correto" de keyUsage.

Thanatos
fonte
2
Veja minha nota sobre a pergunta; a configuração nesta resposta é inválida, pois *.*.example.comnão é válida (você não pode ter vários *s); c / p-tenha cuidado.
Thanatos
A seção vazia req_distinguished_namenão é aceita pelo openssl 1.1.0f, portanto você precisa ter pelo menos countryName_defaultlá (consulte o Guia Aberto do Openssl.conf ).
AntonK
12

Eu tive o mesmo problema e encontrei a resposta aqui:

https://www.citrix.com/blogs/2015/04/10/how-to-create-a-csr-for-a-san-certificate-on-netscaler/

O arquivo de configuração fica 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 depois:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr
Miquel
fonte
11
Isso funcionaria também; Eu estava especificando o assunto na linha de comando (como era mais simples para o meu caso de uso); isso apenas o move para o arquivo de configuração. Além disso, minha pergunta dizia respeito ao OpenSSL reclamando que o assunto não foi encontrado quando, de fato, foi especificado.
Thanatos
Não tenho certeza se esta solução funciona - no Windows, ele relata constantemente "Não é possível encontrar o nome_destinado na configuração" tentei de tudo.
hagubear
11
A req_distinguished_nameseção pode ser deixada em branco. O que ele faz é especificar o modelo de rótulos dos nomes de campos necessários, que podem ser substituídos por -subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xxetc., ou seja, para não atribuir esses valores de campo.
Devy
5

Para mim, esse erro parece ser 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 gera um erro sem bloqueio antes de solicitar o passe phare:

Não é possível abrir C: \ Arquivos de Programas (x86) \ Arquivos Comuns \ SSL / openssl.cnf para leitura, Nenhum arquivo ou diretório

Claramente, o caminho é inválido devido à barra incorreta; portanto, o arquivo de configuração deve ser explicitamente anexado à linha de comando:

openssl req -new -sha256 -key private.pem -config openssl.cfg -out example.csr
Alexei
fonte
Isso funcionou para mim, agradável e limpo. Muito obrigado!
Sossenbinder 5/17/17
Embora isso sem dúvida resolva seu problema, ele não se relaciona à pergunta original, além de ter que fazer com o OpenSSL. (Isso pode ser melhor como uma pergunta / resposta em separado.)
Thanatos
Este fixa o meu problema com "openssl incapaz de encontrar 'distinguished_name' em config” Obrigado!
chris31389
1

Este erro semelhante:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem -days 365 -nodes Você será solicitado a inserir informações que serão incorporadas à sua solicitação de certificado. O que você está prestes a inserir é o que é chamado de Nome Distinto ou DN. Existem alguns campos, mas você pode deixar em branco. Para alguns campos, haverá um valor padrão. Se você digitar '.', O campo será deixado em branco. ----- Nome do país (código de 2 letras) [AU]: problemas na solicitação de certificado

(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.

rogerdpack
fonte
0

Outro problema possível pode ser caracteres UTF-8 especiais (invisíveis). Verifique seu arquivo usando

cat -v $OPTIONS_FILE
feri
fonte