OpenSSL: Как создать сертификат с пустым предметным DN?


14

Можно ли создать запрос сертификата PKCS # 10 / сертификат X.509 с идентифицирующей информацией только в атрибуте / расширении альтернативного имени субъекта? В соответствии с X.509 4.1.2.6 Тема , субъект может быть пустым для сертификата, субъект которого не является центром сертификации, если 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. Я должен был повторить их, но это сработало по крайней мере.
Нейт В.

3
Это потому, что файл конфигурации на самом деле не содержит значений по умолчанию. C = USозначает, что «приглашение» для C - это «США», а не значение по умолчанию. Вместо этого файл должен содержать C = Countryи C_default = US.
Джорданбакер

5
Ох, и это только если prompt = yes [or blank]. Если prompt = noто C = USбудет означать «США» является значением по умолчанию.
Джорданбакер

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.