OpenSSL: วิธีสร้างใบรับรองที่มีหัวเรื่อง DN ที่ว่างเปล่า


14

เป็นไปได้หรือไม่ที่จะสร้างการร้องขอใบรับรอง PKCS # 10 / ใบรับรอง X.509 ที่มีข้อมูลการระบุเฉพาะในแอตทริบิวต์ / นามสกุลของชื่อเรื่อง ตามX.509 4.1.2.6 หัวเรื่องหัวเรื่องอาจว่างเปล่าสำหรับใบรับรองที่มีหัวเรื่องไม่ใช่ CA ตราบใดที่ subjectAltName มีความสำคัญ

แต่เมื่อฉันใช้ไฟล์กำหนดค่านี้กับส่วนที่แตกต่างที่ว่างเปล่า:

# request.config
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:certtest@example.com

และคำสั่ง

openssl genrsa 1024 > key.pem
openssl req -new -key key.pem -out req.pem -config request.config

OpenSSL บ่น:

error, no objects specified in config file
problems making Certificate Request

คำตอบ:


11

สิ่งนี้ใช้ได้กับฉัน:

ไฟล์ test-no-cn.cnf

[req] 
default_bits       = 4096
encrypt_key        = no
default_md         = sha256
distinguished_name = req_distinguished_name
req_extensions = v3_req

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:certtest@example.com,URI:http://example.com/,IP:192.168.7.1,dirName:dir_sect

[dir_sect]
C=DK
O=My Example Organization
OU=My Example Unit
CN=My Example Name

สร้าง CSR

openssl req -new -newkey rsa:4096 -nodes -config test-no-cn.cnf -subj "/" -outform pem -out test-no-cn.csr -keyout test-no-cn.key

ลงนามใน CSR

openssl x509 -req -days 365 -in test-no-cn.csr -signkey test-no-cn.key -out test-no-cn.crt -outform der -extensions v3_req -extfile test-no-cn.cnf

ดูใบรับรองผลลัพธ์

openssl x509 -inform der -in test-no-cn.crt -noout -text

8

ฉันยังพบข้อผิดพลาด "ไม่ระบุวัตถุ" นี้ มันแสดงพรอมต์เช่นนี้สำหรับฟิลด์ต่างๆ:

US []:

และฉันเพิ่งกด Enter เพราะฉันได้ตั้งค่าเหล่านี้ในไฟล์. cnf แล้ว ปรากฎว่าฉันต้องพิมพ์ค่าทั้งหมดอีกครั้งแล้วก็ใช้งานได้


ฉันต้องทำเช่นเดียวกัน แม้จะใส่ค่าลงในไฟล์กำหนดค่าแล้วก็ยังแจ้งให้ฉันทราบสำหรับส่วนประกอบ DN ทั้งหมดอีกครั้ง ฉันต้องทำซ้ำ แต่มันก็ใช้งานได้อย่างน้อย
Nate W.

3
นี่เป็นเพราะไฟล์กำหนดค่าไม่มีค่าเริ่มต้นจริง ๆ C = USหมายความว่า "พรอมต์" สำหรับ C คือ "US" ไม่ใช่ค่าเริ่มต้น แต่ไฟล์ควรมีและC = Country C_default = US
jordanbtucker

5
Oh, prompt = yes [or blank]และว่าเฉพาะในกรณีที่ ถ้าเช่นprompt = noนั้นC = USจะแปลว่า "US" เป็นค่าเริ่มต้น
jordanbtucker

3

ปัญหาเกิดขึ้นกับprompt = noการกำหนดค่าดั้งเดิม ที่ทำให้openssl reqคิดว่าคุณตั้งใจที่จะระบุรายการเรื่องในไฟล์ config และนิยมการตรวจสอบเบื้องต้นใน req.c

มีวิธีแก้ไข: ลบprompt = noและเพิ่มลง-subj /ในopenssl reqบรรทัดคำสั่งของคุณแทน นี่คือตัวอย่างสคริปต์ที่สร้างทั้ง CSR และใบรับรองแบบลงนามด้วยตนเอง:

cat > openssl.cnf <<EOF
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:certtest@example.com
EOF
openssl req -newkey rsa:2048 -config openssl.cnf -nodes -new -subj "/" \
  -out req.csr
openssl req -newkey rsa:2048 -config openssl.cnf -nodes -new -subj "/" \
  -x509 -out cert.crt


1

ดูเหมือนว่าคุณจะป้อนค่าหนึ่งค่าใด ๆ จากกลุ่ม '"distinguished_name" จากแป้นพิมพ์ของคุณและทำงานได้ดี ... ฉันหมายความว่าคุณไม่จำเป็นต้องป้อนค่าอื่นและสามารถใช้ค่าเริ่มต้น (ดังที่กล่าวไว้ในไฟล์ openssl.conf) ที่กล่าวว่า

[ req ]
...
distinguished_name = req_distinguished_name
prompt = no
...

Should work fine.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.