web-dev-qa-db-ja.com

openssl "設定で 'distinguished_name'が見つかりません"

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 

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

私はここで何をしていますか?

36
Thanatos

私が言えるように-configはある種の内部設定を上書きしています。 のopenPl 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証明書では非推奨です1、したがって-sha256(これは文書化されていないフラグです)。上記のベストプラクティスのCSRを生成するために私が知っている唯一の追加の問題は、少なくとも2048ビットのRSAキーサイズを使用する必要があるということです(私がRSAを使用している場合)。現在のデフォルトは安全ではないため、youはサイズをopenssl genrsaコマンドに指定する必要があります

¹私がこれを書いている時点では壊れていませんが、人々はそれが時間の問題であると感じています。 "徐々に日没SHA1"を参照してください。
²ドメイン名にCNを使用することは推奨されなくなりました。ブラウザがこれを廃止する予定であるかどうか、私にはわかりません。 "サブジェクトの共通名にドメイン名のように見える文字列を含めたり調べたりすることを避けましょう。"、 RFC 6125
注:keyUsageの「正しい」値については、よくわかりません。

25
Thanatos

私は同じ問題を抱えていてそしてここに反応を見つけました:

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
10
Miquel

私にとっては、このエラーは、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を読み取り用に開くことができません。ファイルまたはディレクトリがありません。

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

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

この同様のエラー:

$ 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に移動します。

1
rogerdpack