OpenSSL: Jak utworzyć certyfikat z pustą nazwą wyróżniającą podmiotu?

14

Czy można utworzyć wniosek o certyfikat PKCS # 10 / certyfikat X.509 z informacjami identyfikującymi tylko w atrybucie / rozszerzeniu alternatywnej nazwy podmiotu? Zgodnie z X.509 4.1.2.6 Przedmiot , podmiot może być pusty dla certyfikatu, którego podmiot nie jest urzędem certyfikacji, o ile nazwa podmiotu jest krytyczna.

Ale kiedy używam tego pliku konfiguracyjnego z pustą sekcją nazwa_wyróżniająca:

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

i polecenia

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

OpenSSL narzeka:

error, no objects specified in config file
problems making Certificate Request
Yonran
źródło

Odpowiedzi:

11

To działało dla mnie:

plik 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

Wygeneruj 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

Podpisz 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

Wyświetl wynikowy certyfikat

openssl x509 -inform der -in test-no-cn.crt -noout -text
bpawlak
źródło
8

Zetknąłem się również z błędem „nie określono obiektów”. Wyświetlał się taki monit dla różnych pól:

US []:

I właśnie naciskałem klawisz Enter, ponieważ ustawiłem już te wartości w pliku .cnf. Okazuje się, że musiałem ponownie wpisać wszystkie wartości, a potem zadziałało.

Oran Dennison
źródło
Musiałem zrobić to samo. Pomimo umieszczenia wartości w pliku konfiguracyjnym nadal monitował mnie o wszystkie składniki nazwy wyróżniającej. Musiałem je powtórzyć, ale przynajmniej zadziałało.
Nate W.
3
Wynika to z faktu, że plik konfiguracyjny nie zawierał wartości domyślnych. C = USoznacza, że ​​„monit” dla C to „US”, a nie wartość domyślna. Zamiast tego plik powinien zawierać C = Countryi C_default = US.
jordanbtucker
5
Och, i to tylko wtedy prompt = yes [or blank]. Jeśli prompt = noto C = USznaczy, że „US” jest wartością domyślną.
jordanbtucker
3

Problem dotyczy prompt = nooryginalnej konfiguracji. To sprawia, że openssl reqzakładam, że zamierza podać dane podmiotu w pliku konfiguracyjnym i uderza wstępną kontrolę w req.c .

Istnieje obejście: Usuń prompt = noi zamiast tego dodaj -subj /do openssl reqwiersza poleceń. Oto przykładowy skrypt, który generuje zarówno CSR, jak i samopodpisany certyfikat:

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
źródło
2

Spróbuj „commonName = opcjonalne” w sekcjach zasad w pliku konfiguracyjnym openssl.

Artem
źródło
1

Wygląda na to, że wpisujesz z klawiatury dowolną pojedynczą wartość z grupy „nazwa_wyróżniająca” i działa dobrze ... Mam na myśli, że nie musisz wprowadzać innych wartości i możesz użyć ich wartości domyślnych (jak wspomniano w pliku openssl.conf)

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

Should work fine.
hardeep
źródło