openssl “tidak dapat menemukan 'differished_name' di config”

40

Saya mendapatkan kesalahan berikut dari openssl req:

unable to find 'distinguished_name' in config
problems making Certificate Request
41035:error:0E06D06C:configuration file routines:NCONF_get_string:no value:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/crypto/conf/conf_lib.c:329:group=req name=distinguished_name

Pemahaman saya adalah bahwa ini adalah "Subject" bahwa ia tidak dapat menemukan ... Namun, saya sedang menetapkan bahwa:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=ACME, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

Satu-satunya saran manual adalah bahwa file konfigurasi tidak ada; Saya bisa cat "$OPTIONS_FILE", jadi pasti ada di sana, dan kesalahan tidak didahului oleh kesalahan catatan manual itu akan didahului oleh jika ini terjadi, jadi saya cukup yakin opensslmelihat file konfigurasi.

File config saya berisi yang berikut ini:

[req]
req_extensions = v3_req

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.example.com 

... yang secara harfiah adalah contoh dalam dokumen .

Apa yang saya lakukan salah di sini?

Thanatos
sumber
1
Catatan kecil: subjectAltName yang ditentukan di sini,, *.*.example.comtidak valid. (Anda hanya dapat memiliki 1 *, dan hanya di komponen paling kiri.) Ini tidak berhubungan dengan masalah di sini, tetapi jangan c / p secara membabi buta.
Thanatos

Jawaban:

30

Sejauh yang saya tahu , -configmenimpa semacam konfigurasi internal; jika Anda melihat bagian "CONTOH" untuk halaman manual untuk openssl req , ia memperlihatkan contoh file konfigurasi distinguished_namedi dalamnya. Pada firasat, saya menambahkan yang berikut ke konfigurasi saya:

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

Dengan demikian, seluruh konfigurasi saya terlihat seperti

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[req_distinguished_name]

[v3_req]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.${DOMAIN}

(Perhatikan bahwa di sini, ${DOMAIN}tidak secara literal; Anda harus menggantinya dengan nama domain DNS Anda; Saya membuat file ini dengan bashskrip cat >"$OPTIONS_FILE" <<EOF, diikuti oleh yang di atas, diikuti oleh EOF)

openssl req … -subj <my subject> -config <that file> …kemudian mengambil subjek saya dari baris perintah. Bagi mereka yang tertarik, seluruh perintah akhirnya tampak seperti:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=My Company, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

Pada posting ini, pemahaman saya adalah bahwa SHA-1 sudah usang¹ untuk sertifikat X.509, karenanya -sha256(yang merupakan bendera tidak berdokumen ...), dan subjectAltName menjadi wajib², maka diperlukan konfigurasi. Satu-satunya gotcha tambahan yang saya tahu untuk menghasilkan CSR praktik terbaik ke atas adalah bahwa Anda harus menggunakan ukuran kunci RSA setidaknya 2048 bit (jika Anda menggunakan RSA, yang saya); Anda harus menentukan ukuran keopenssl genrsa perintah karena standar saat ini tidak aman.

¹Sementara tidak rusak pada saat saya menulis ini, orang-orang merasa hanya masalah waktu saja. Lihat "
Matahari terbenam secara bertahap SHA1" ²Menggunakan CN untuk nama domain tidak lagi direkomendasikan; Saya tidak yakin kapan / jika browser berencana untuk menghentikan ini. "Minggir dari memasukkan dan memeriksa string yang terlihat seperti nama domain dalam Nama Umum subjek.", RFC 6125
Catatan: Saya kurang yakin tentang nilai "benar" dari keyUsage.

Thanatos
sumber
2
Lihat catatan saya pada pertanyaan; konfigurasi dalam jawaban ini tidak valid, karena *.*.example.comitu tidak valid (Anda tidak dapat memiliki banyak *s); c / p-ers berhati-hatilah.
Thanatos
Bagian kosong req_distinguished_nametidak diterima oleh openssl 1.1.0f, jadi Anda harus memiliki setidaknya di countryName_defaultsana (rujuk ke Openssl.conf Walkthru ).
AntonK
12

Saya memiliki masalah yang sama dan menemukan jawabannya di sini:

https://www.citrix.com/blogs/2015/04/10/how-to-create-a-csr-for-a-san-certificate-on-netscaler/

File konfigurasi terlihat seperti ini:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = www.company.net 
DNS.4 = company.net 

Lalu:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr
Miquel
sumber
1
Ini juga akan berhasil; Saya menetapkan subjek pada baris perintah (karena itu lebih mudah untuk kasus penggunaan saya); ini hanya memindahkannya ke file konfigurasi. Terlebih lagi, pertanyaan saya terkait dengan OpenSSL mengeluh bahwa subjek tidak dapat ditemukan ketika, sebenarnya, telah ditentukan.
Thanatos
Saya tidak yakin apakah solusi ini berfungsi - di Windows selalu melaporkan "Tidak dapat menemukan nama yang dibedakan dalam konfigurasi" mencoba semuanya.
hagubear,
1
The req_distinguished_namebagian bisa kosong kiri. Apa yang dilakukannya adalah menentukan templat label dari nama bidang yang diperlukan, yang dapat ditimpa oleh -subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xxdll., Artinya, bukan untuk menetapkan nilai bidang tersebut.
Devy
5

Bagi saya kesalahan ini tampaknya disebabkan oleh pembuatan jalur yang salah saat menjalankan perintah di Windows Server 2012, C:\OpenSSL-Win32\bin

openssl req -new -sha256 -key private.pem -out example.csr

yang menghasilkan kesalahan non-pemblokiran sebelum meminta pass phare:

Tidak dapat membuka C: \ Program Files (x86) \ Common Files \ SSL / openssl.cnf untuk membaca, Tidak ada file atau direktori

Jelas, path tidak valid karena slash yang salah, jadi file config harus ditambahkan secara eksplisit di baris perintah:

openssl req -new -sha256 -key private.pem -config openssl.cfg -out example.csr
Alexei
sumber
Ini bekerja untuk saya, bagus dan bersih. Terima kasih banyak!
Sossenbinder
Meskipun ini tidak diragukan lagi menyelesaikan masalah Anda, itu tidak berhubungan dengan pertanyaan asli selain harus dilakukan dengan OpenSSL. (Ini mungkin lebih baik sebagai pertanyaan / jawaban terpisah.)
Thanatos
Ini memperbaiki masalah saya dengan "openssl tidak dapat menemukan '
differished_name
1

Kesalahan serupa ini:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem -days 365 -nodes Anda akan diminta untuk memasukkan informasi yang akan dimasukkan ke dalam permintaan sertifikat Anda. Apa yang akan Anda masukkan adalah apa yang disebut dengan Distinguished Name atau DN. Ada beberapa bidang tetapi Anda dapat membiarkan beberapa kosong. Untuk beberapa bidang akan ada nilai default, Jika Anda memasukkan '.', Bidang tersebut akan dibiarkan kosong. ----- Nama Negara (2 kode huruf) [AU]: masalah dalam membuat Permintaan Sertifikat

(Ubuntu 17.04) berarti "Anda perlu menambahkan

-subj "/C=US/ST=California/L=San Francis co/O=ACME, Inc./CN=*.*.$DOMAIN/"

ke baris perintah "FWIW.

rogerdpack
sumber
0

Masalah lain yang mungkin terjadi adalah karakter UTF-8 khusus (tidak terlihat). Periksa file Anda menggunakan

cat -v $OPTIONS_FILE
feri
sumber