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เห็นไฟล์ config

ไฟล์ปรับแต่งของฉันมีดังต่อไปนี้:

[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ก็แสดงให้เห็นตัวอย่างของไฟล์ config ที่มี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"

ในขณะที่โพสต์นี้ความเข้าใจของฉันคือ SHA-1 ถูกคัดค้าน¹สำหรับ X.509 certs ดังนั้น-sha256(ซึ่งเป็นค่าสถานะที่ไม่มีเอกสาร…) และ subjectAltName กลายเป็นสิ่งจำเป็น²จึงจำเป็นต้องมีการกำหนดค่า gotcha เพิ่มเติมเพียงอย่างเดียวที่ฉันรู้เพื่อสร้าง CSR ที่ดีที่สุดสำหรับข้างต้นคือคุณควรใช้ขนาดคีย์ RSA อย่างน้อย 2048 บิต (หากคุณใช้ RSA ซึ่งฉันเป็น) คุณต้องระบุขนาดให้กับopenssl genrsaคำสั่งเนื่องจากค่าเริ่มต้นในปัจจุบันไม่ปลอดภัย

h แม้จะไม่พังในเวลาที่ฉันเขียนสิ่งนี้ผู้คนรู้สึกว่ามันเป็นเพียงเรื่องของเวลา ดูที่"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 จะมีการรายงานว่า "ไม่สามารถค้นหาชื่อ
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

ข้อผิดพลาดที่ไม่มีการปิดกั้นซึ่งส่งออกก่อนที่จะถามสำหรับ phare ผ่าน:

ไม่สามารถเปิด C: \ Program Files (x86) \ Common Files \ SSL / openssl.cnf สำหรับการอ่าน, ไม่มีไฟล์หรือไดเรกทอรี

เห็นได้ชัดว่าเส้นทางไม่ถูกต้องเนื่องจากเครื่องหมายทับผิดดังนั้นไฟล์กำหนดค่าจะต้องต่อท้ายในบรรทัดคำสั่งอย่างชัดเจน:

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

สิ่งนี้ใช้ได้สำหรับฉันดีและสะอาด ขอบคุณมาก!
Sossenbinder

แม้ว่าข้อสงสัยนี้จะช่วยแก้ปัญหาของคุณได้ แต่ก็ไม่ได้เกี่ยวข้องกับคำถามเดิมนอกเหนือจากการทำ w / OpenSSL (สิ่งนี้อาจจะดีกว่าถ้าเป็นคำถาม / คำตอบที่แยกต่างหาก)
Thanatos

สิ่งนี้แก้ไขปัญหาของฉันด้วย "openssl ไม่สามารถหา 'distinguished_name' ในการกำหนดค่า" ขอบคุณ!
chris31389

1

ข้อผิดพลาดที่คล้ายกันนี้:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem -days 365-nodes คุณกำลังถูกขอให้ป้อนข้อมูลที่จะถูกรวมเข้ากับคำขอใบรับรองของคุณ สิ่งที่คุณกำลังจะป้อนคือชื่อที่เรียกว่า Distinguished Name หรือ DN มีฟิลด์ค่อนข้างน้อย แต่คุณสามารถเว้นว่างไว้บ้างสำหรับบางฟิลด์จะมีค่าเริ่มต้นหากคุณป้อน '.' ฟิลด์จะถูกเว้นว่างไว้ ----- ชื่อประเทศ (รหัสตัวอักษร 2 ตัว) [AU]: ปัญหาในการขอใบรับรอง

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