openssl「構成に「distinguished_name」が見つかりません」


40

から次のエラーが表示され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 

…これはほとんど文字通りドキュメントの例です。

ここで何が間違っていますか?


1
ちょっとした注意:ここで指定されたsubjectAltName *.*.example.comは無効です。(1つ*だけ、左端のコンポーネントにのみ持つことができます。)これは、ここでの問題とは関係ありませんが、盲目的にc / pしないでください。
タナトス

回答:


30

私が知る限り-configある種の内部構成をオーバーライドしています。openssl reqのマニュアルページに「例」セクションが表示されている場合、その中にある構成ファイルの例を示し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"

この投稿の時点で、私の理解では、SHA-1はX.509証明書では非推奨¹であるため-sha256(これは文書化されていないフラグです...)、subjectAltNameが必須になっているため、構成が必要です。上記のベストプラクティスCSRを生成するために知っている唯一の追加の落とし穴は、少なくとも2048ビットのRSAキーサイズを使用することです(RSAを使用している場合)。あなたがしなければならないのサイズを指定してopenssl genrsa、現在のデフォルトは安全ではありませんように、コマンド。

¹私がこれを書いている時点では壊れていないが、人々はそれは時間の問題だと感じている。参照「徐々にsunsetting SHA1」
ドメイン名の²UsingCNはもはや推奨されません。ブラウザがこれを廃止する予定があるかどうかはわかりません。「サブジェクトの共通名にドメイン名のように見える文字列を含めてチェックすることから遠ざかってください。」、RFC 6125
注:の「正しい」値についてはあまり確信がありませんkeyUsage


2
質問に関する私のメモを参照してください。この回答の構成は無効*.*.example.comです。つまり、無効です(複数*のsを持つことはできません)。c / p-ersは注意してください。
タナトス

空のセクションreq_distinguished_nameはopenssl 1.1.0fでは受け入れられないため、少なくともcountryName_defaultそこに存在する必要があります(Openssl.conf Walkthruを参照)。
AntonK

12

私は同じ問題を抱えていて、ここで応答を見つけました:

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

構成ファイルは次のようになります。

[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 

その後:

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

1
これも機能します。コマンドラインで件名を指定していました(私の使用例では簡単だったため)。これは単に設定ファイルに移動します。さらに、OpenSSLに関連する私の質問は、実際には指定されていたのに、件名が見つからないという不平を言っています。
タナトス

この解決策が機能するかどうかはわかりません-Windowsでは、「configでdistinguished_nameが見つかりません」というメッセージが常に表示されます。
hagubear

1
req_distinguished_nameセクションは空白のままにすることができます。それは、必要なフィールド名のラベルのテンプレートを指定する-subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xxことです。これは、などによって上書きできますが、それらのフィールド値を割り当てることはできません。
-Devy

5

私にとって、このエラーは、Windows Server 2012でコマンドを実行する際の誤ったパスの作成が原因のようです。 C:\OpenSSL-Win32\bin

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

パスフェーズを要求する前に非ブロッキングエラーを出力します。

読み取りのためにC:\ Program Files(x86)\ Common Files \ SSL / openssl.cnfを開けません、ファイルまたはディレクトリがありません

明らかに、間違ったスラッシュのためにパスが無効であるため、コマンドラインに構成ファイルを明示的に追加する必要があります。

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

これは私にとってはうまくいき、きれいでした。どうもありがとう!
ソッセンビンダー

これは間違いなくあなたの問題を解決しますが、OpenSSLを使用する必要があることを除いて、元の質問とは関係ありません。(これは別の質問/回答としてより良いかもしれません。)
タナトス

これにより、「opensslがconfigに「distinguished_name」を見つけることができません」という問題が修正されました!
-chris313​​89

1

同様のエラー:

$ openssl req -x509 -newkey rsa:4096 -keyout _key.pem -out cert.pem -days 365 -nodes証明書要求に組み込まれる情報を入力するように求められています。入力しようとしているのは、識別名またはDNと呼ばれるものです。かなりの数のフィールドがありますが、空白のままにすることができます。一部のフィールドでは、デフォルト値があります。「。」を入力すると、フィールドは空白のままになります。-----国名(2文字のコード)[AU]:証明書要求を行う問題

(Ubuntu 17.04)「追加する必要がある」

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

コマンドラインへ」FWIW。


0

別の考えられる問題は、特殊な(見えない)UTF-8文字です。を使用してファイルを確認してください

cat -v $OPTIONS_FILE
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.