OpenSSL: Как создать сертификат с пустым DN субъекта?
Можно ли создать запрос сертификата 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
5 ответов
Это сработало для меня:
файл 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
Я также столкнулся с этой ошибкой "никакие объекты не указаны". Это отображало подсказку как это для различных полей:
US []:
И я просто нажимал Enter, потому что я уже установил эти значения в файле.cnf. Оказывается, мне нужно было снова ввести все значения, и тогда это сработало.
Проблема с 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
Попробуйте "commonName = необязательный" в разделах политики в файле конфигурации openssl.
Кажется, вы вводите одно значение из группы "отличное_имение" со своей клавиатуры, и оно работает нормально... Я имею в виду, что вам не нужно вводить другие значения и вы можете использовать их значения по умолчанию (как указано в файле openssl.conf), которые
[ req ]
...
distinguished_name = req_distinguished_name
prompt = no
...
Should work fine.