openssl "구성에서 'distinguished_name'을 (를) 찾을 수 없습니다"


40

에서 다음과 같은 오류가 발생합니다 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

나의 이해는이가 ... 그러나, 내가 찾을 수있는 "제목"이라는 것이다 하고 그 지정이 :

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"

매뉴얼의 유일한 제안은 설정 파일이 존재하지 않는다는 것입니다. 나는 할 수 cat "$OPTIONS_FILE"있으므로 분명히 거기에 있으며 오류 앞에는 수동 노트가있을 경우 앞에 오는 수동 메모 오류가 발생하지 않으므로 openssl구성 파일을 볼 수 있습니다.

내 구성 파일에는 다음이 포함됩니다.

[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 

... 이것은 말 그대로 문서의 예제입니다 .

내가 여기서 뭘 잘못하고 있니?


1
사소한 참고 : 여기에 지정된 subjectAltName *.*.example.com이 (가) 유효하지 않습니다. ( *가장 왼쪽 컴포넌트에만 1을 가질 수 있습니다 .) 이것은 여기서 문제와 관련이 없지만 맹목적으로 c / p하지는 않습니다.
Thanatos

답변:


30

내가 말할 수있는 근처 , -config내부 설정의 일종을 무시한다; openssl req의 매뉴얼 페이지에 "EXAMPLES"섹션 이 표시되면 구성 파일의 예가 표시 distinguished_name됩니다. 한순간에 구성에 다음을 추가했습니다.

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

따라서 내 전체 구성은 다음과 같습니다.

[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}

(여기서는 ${DOMAIN}문자 그대로가 아니라 DNS 도메인 이름으로 바꿔야합니다.이 파일을 bash스크립트로 만든 cat >"$OPTIONS_FILE" <<EOF다음 위의, 뒤에 EOF)

openssl req … -subj <my subject> -config <that file> …그런 다음 내 명령을 명령 줄에서 가져 왔습니다. 관심있는 사람들을 위해 전체 명령은 다음과 같이 끝났습니다.

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"

이 글을 읽었을 때, X.509 인증서의 경우 SHA-1이 더 이상 사용되지 않으므로 ¹ -sha256(문서화되지 않은 플래그 임), subjectAltName이 필요 해지고 ² 따라서 구성이 필요합니다. 위의 모범 사례 CSR을 생성하기 위해 알아야 할 유일한 추가 사항은 2048 비트 이상의 RSA 키 크기를 사용해야한다는 것입니다 (RSA를 사용하는 경우). 당신은 해야한다 받는 크기를 지정 openssl genrsa현재의 기본은 안전하지 않습니다으로 명령을 실행합니다.

¹이 글을 쓰는 시점에서 깨지지 않았지만 사람들은 시간 문제 일 뿐이라고 생각합니다. "점진적으로 일몰 SHA1"을 참조하십시오.
² 도메인 이름으로 CN을 사용하지 않는 것이 좋습니다. 브라우저가 언제 / 사용하지 않는지 확실하지 않습니다. "주체의 공통 이름에 도메인 이름처럼 보이는 문자열을 포함하고 확인하는 것을 피하십시오.", RFC 6125
참고 :의 "올바른"값에 대해서는 확실하지 않습니다 keyUsage.


2
질문에 대한 나의 메모를보십시오; 이 답변의 구성이 유효하지 *.*.example.com않습니다. 유효하지 않습니다 (여러 개를 가질 수 없음 *). c / p-ers는주의하십시오.
Thanatos

req_distinguished_nameopenssl 1.1.0f는 빈 섹션을 허용하지 않으므로 최소한 countryName_default거기 에 있어야 합니다 ( Openssl.conf Walkthru 참조 ).
AntonK

12

나는 같은 문제가 있었고 여기에서 대답을 찾았다.

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

구성 파일은 다음과 같습니다.

[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 

그리고:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr

1
이것도 효과가 있습니다. 커맨드 라인에 주제를 지정하고있었습니다 (사용 사례보다 간단했습니다). 이것은 구성 파일로 이동시킵니다. 또한 OpenSSL과 관련된 제 질문은 실제로 지정되었을 때 주제를 찾을 수 없다는 불만입니다.
Thanatos

이 솔루션이 작동하는지 확실하지 않습니다. Windows에서 "구성에서 distinguished_name을 찾을 수 없습니다"라는 메시지가 계속보고됩니다.
hagubear

1
req_distinguished_name부분은 비워 할 수 있습니다. 그것은 필요한 필드 이름의 레이블 템플릿을 지정하는 것입니다.이 필드 -subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xx등은 덮어 쓸 수 있지만 필드 값을 할당하지는 않습니다.
Devy

5

나 에게이 오류는 Windows Server 2012에서 명령을 실행할 때 잘못된 경로 생성으로 인한 것 같습니다. C:\OpenSSL-Win32\bin

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

pass phare를 요청하기 전에 비 차단 오류를 출력합니다.

읽을 C : \ Program Files (x86) \ Common Files \ SSL / openssl.cnf를 열 수 없습니다. 파일 또는 디렉토리가 없습니다.

슬래시가 잘못되어 경로가 잘못되었으므로 명령 행에 구성 파일을 명시 적으로 추가해야합니다.

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

이것은 훌륭하고 깨끗하게 나를 위해 일했습니다. 고마워요!
Sossenbinder

의심의 여지없이 문제를 해결하지만 OpenSSL을 사용하지 않아도되는 원래 질문과는 관련이 없습니다. (이것은 별도의 질문 / 답변으로 더 나을 수 있습니다.)
Thanatos

이것은 "openssl이 '
configing

1

이 비슷한 오류 :

$ openssl req -x509 -newkey rsa : 4096 -keyout _key.pem -out cert.pem -days 365 -nodes 인증서 요청에 통합 될 정보를 입력하라는 메시지가 표시됩니다. 입력하려고하는 것은 식별 이름 또는 DN입니다. 필드가 꽤 있지만 일부를 비워 둘 수 있습니다. 일부 필드의 경우 기본값이 있습니다. '.'를 입력하면 필드가 비워집니다. ----- 국가 이름 (2 자 코드) [AU] : 인증 요청 문제

(우분투 17.04)는 "추가해야합니다

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

명령 행에 "FWIW.


0

또 다른 가능한 문제는 특수한 (보이지 않는) UTF-8 문자 일 수 있습니다. 파일을 사용하여 확인

cat -v $OPTIONS_FILE
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.