OpenSSL: Як створити сертифікат із порожньою темою DN?


14

Чи можливо створити запит на сертифікат PKCS # 10 / X.509 з ідентифікаційною інформацією лише в альтернативному атрибуті / розширенні імені предмета? Відповідно до X.509 4.1.2.6 Тема , суб'єкт може бути порожнім для сертифіката, суб'єкт якого не є ЦС, доки критичний предмет має значення.

Але коли я використовую цей конфігураційний файл із порожнім розділом розрізненого імені:

# 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

Створити КСВ

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

Підпишіть КСВ

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
О, і це тільки якщо prompt = yes [or blank]. Якщо prompt = noтоді C = USзначить "US" - це значення за замовчуванням.
jordanbtucker

3

Проблема prompt = noв оригінальному конфігурації. ЯКИЙ РОБИТЬ openssl reqПрипустимо , ви збираєтеся вказати дані , що підлягають в файлі конфігурації і потрапляє в попередню перевірку в 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

2

Спробуйте "commonName = необов'язково" у розділах політики у файлі конфігурації openssl.


1

Здається, ви вводите з клавіатури будь-яке одне значення з групи "відрізняється ім'я", і це працює чудово ... Я маю на увазі, що вам не потрібно вводити інші значення і можете використовувати їх за замовчуванням (як згадується у файлі openssl.conf), який сказав

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

Should work fine.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.