openssl “unable to find ‘distinguished_name’ in config”

openssl

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

私の理解では、これが見つからないのは「件名」だと思っているのですが……ただし、それを指定しています

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"

マニュアルの唯一の提案は、設定ファイルが存在しないということです。cat "$OPTIONS_FILE"は存在しているので、間違いなく存在していますし、もしそうであればマニュアルにあるようなエラーは発生しないので、opensslが設定ファイルを見ているのは間違いないでしょう

私の設定ファイルには以下のような内容が含まれています

[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

…これはかなり文字通りドキュメントの例です

私はここで何を間違っているのでしょうか?

  45  Thanatos  2015-07-29


ベストアンサー

the man page for openssl req の “EXAMPLES” セクションを見ると、distinguished_name を含む設定ファイルの例が示されています。直感で、以下のように設定ファイルに追加しました

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

このようにして、私の設定全体は以下のようになりました

[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}

(ここでは、${DOMAIN}はリテラルではないことに注意してください; DNSドメイン名に置き換える必要があります; 私はこのファイルをbashスクリプトでcat >"$OPTIONS_FILE" <<EOFの後に上記の後にEOFを続けて作成しています)

openssl req … -subj <my subject> -config <that file> … は、コマンドラインから私の主題を取得しました。興味のある方のために、コマンド全体は以下のようになりました

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"

この投稿の時点で、私の理解では、X.509 認証では SHA-1 は非推奨¹であり、したがって -sha256 (これは文書化されていないフラグですが….)、subjectAltName は必須²になりつつあり、したがって設定が必要になっているということです。上記のベスト・プラクティス CSR を生成するために、私が知っている唯一の追加的なガチャは、少なくとも 2048 ビットの RSA 鍵サイズを使用することです (RSA を使用している場合、私は使用しています)

¹これを書いている時点では壊れてはいませんが、時間の問題だと感じている人がいます。“徐々にSHA1のサンセット化” ²ドメイン名にCNを使用することは推奨されなくなりました。”件名のコモンネームにドメイン名のような文字列を含めたりチェックしたりすることから離れてください。”, RFC 6125 注: keyUsage.の “正しい “値についてはあまり確信が持てません

36  Thanatos  2015-07-29


私も同じ悩みを抱えていて、こちらの回答を見つけました

How to Create a CSR for a SAN Certificate Using OpenSSL on a NetScaler Appliance - Citrix Blogs
This article describes how to create a CSR and key file for a SAN certificate with multiple subject alternate names. It is based on CTX135602 but validated on N...

設定ファイルはこのようになっています

[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

And then:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr

17  Miquel  2016-08-26


私の場合、このエラーはWindows Server 2012のC:\OpenSSL-Win32\binでコマンドを実行したときのパスの作成が間違っていたために発生したようです

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

パスphareを要求する前にノンブロッキングエラーを出力するようにしました

Can’t open C:\Program Files (x86)C:openssl.cnf for reading, No such file or directory

明らかにスラッシュが間違っていてパスが無効なので、コマンドラインで設定ファイルを明示的に追加しなければなりません

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

5  Alexei  2016-12-17


この似たようなエラー

$ openssl req -x509 -newkey rsa:4096 -keyout _key.pem -out cert.pem -days 365 -nodes あなたの証明書リクエストに組み込まれる情報を入力するよう求められます。これから入力するのは、Distinguished NameまたはDNと呼ばれるものです。いくつかのフィールドにはデフォルト値が設定されていますが、「.」を入力するとフィールドは空白になります。—– 国名 (2文字コード) [AU]:証明書申請に問題があります

(Ubuntu 17.04)は「追加する必要がある」という意味でした

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

をコマンドラインに追加してください」FWIW

1  rogerdpack  2017-08-27


もう一つ考えられるのは、特殊な(見えない)UTF-8文字の可能性があります。を使用してファイルを確認してください

cat -v $OPTIONS_FILE

0  feri  2019-09-13


今後の参考として、/bin/openssl.exeを管理者として実行してください

0  psavov  2020-01-28


タイトルとURLをコピーしました