OpenSSL: Como criar um certificado com um DN de assunto vazio?

10

É possível criar um pedido de certificado PKCS # 10 / certificado X.509 com as informações de identificação apenas no atributo / extensão de nome alternativo do assunto? De acordo com o X.509 4.1.2.6 Assunto , o assunto pode estar vazio para um certificado cujo assunto não é uma CA, desde que subjectAltName seja crítico.

Mas quando eu uso este arquivo de configuração com uma seção vazia distinguished_name:

# 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]

e comandos

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

OpenSSL reclama:

error, no objects specified in config file
problems making Certificate Request
    
por yonran 30.11.2012 / 02:46

5 respostas

9

Isso funcionou para mim:

arquivo 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

Gerar o 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

Assine o 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 o certificado resultante

openssl x509 -inform der -in test-no-cn.crt -noout -text
    
por 23.07.2015 / 18:49
7

Também encontrei este erro "nenhum objeto especificado". Estava exibindo um prompt como este para vários campos:

US []:

E eu estava apenas pressionando enter porque eu já tinha definido esses valores no arquivo .cnf. Acontece que eu precisava digitar todos os valores novamente, e então funcionou.

    
por 04.09.2013 / 22:50
2

Experimente "commonName = optional" nas seções de política no arquivo de configuração openssl.

    
por 18.01.2013 / 01:46
1

Parece que você insere um único valor do grupo '"distinguished_name" do seu teclado e funciona bem ... Quer dizer, você não precisa inserir outros valores e pode usar o padrão deles (como mencionado no arquivo openssl.conf ) que disse

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

Should work fine.
    
por 23.05.2015 / 08:59
1

O problema é com prompt = no na configuração original. Isso faz com que openssl req suponha que você pretenda especificar entradas de assunto no arquivo de configuração e atinge um verificação preliminar em req.c .

Há uma solução alternativa: remova prompt = no e adicione -subj / à sua linha de comando openssl req . Aqui está um exemplo de script que produz tanto um CSR quanto um certificado autoassinado:

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
    
por 16.03.2017 / 22:18

Tags