OpenSSL: ¿Cómo crear un certificado con un DN de sujeto vacío?

14

¿Es posible crear una solicitud de certificado PKCS # 10 / certificado X.509 con la información de identificación solo en el atributo / extensión de nombre alternativo del sujeto? De acuerdo con X.509 4.1.2.6 Asunto , el sujeto puede estar vacío para un certificado cuyo sujeto no sea una CA siempre que el subjectAltName sea crítico.

Pero cuando uso este archivo de configuración con una sección vacía de nombre distinguido:

# 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:[email protected]

y comandos

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

OpenSSL se queja:

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

Respuestas:

11

Esto funcionó para mí:

archivo 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:[email protected],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

Generar la RSE

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

Firma el 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

Ver el certificado resultante

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

También me encontré con este error "sin objetos especificados". Estaba mostrando un mensaje como este para varios campos:

US []:

Y solo estaba presionando enter porque ya había establecido estos valores en el archivo .cnf. Resulta que necesitaba escribir todos los valores nuevamente, y luego funcionó.

Oran Dennison
fuente
Tenía que hacer lo mismo. A pesar de poner valores en el archivo de configuración, todavía me solicitó todos los componentes DN nuevamente. Tuve que repetirlos, pero al menos funcionó.
Nate W.
3
Esto se debe a que el archivo de configuración en realidad no contenía valores predeterminados. C = USsignifica que el "aviso" para C es "EE. UU.", no el valor predeterminado. En cambio, el archivo debe contener C = Countryy C_default = US.
jordanbtucker
55
Ah, y eso es solo si prompt = yes [or blank]. Si prompt = noentonces C = USsignificaría "EE. UU." Es el valor predeterminado.
jordanbtucker
3

El problema está prompt = noen la configuración original. Eso hace que openssl reqasumen que la intención de especificar las entradas de sujetos en el fichero de configuración y realiza un control previo en req.c .

Hay una solución alternativa: eliminar prompt = noy agregar -subj /a su openssl reqlínea de comando. Aquí hay un script de ejemplo que produce un CSR y un certificado autofirmado:

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:[email protected]
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
jsha
fuente
2

Pruebe "commonName = opcional" en las secciones de política en el archivo de configuración openssl.

Artem
fuente
1

Parece que ingresa cualquier valor único del grupo '"nombre_ distinguido" desde su teclado y funciona bien ... Quiero decir que no necesita ingresar otros valores y puede usar su valor predeterminado (como se menciona en el archivo openssl.conf) que decía

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

Should work fine.
endurecer
fuente