OpenSSL:サブジェクトDNが空の証明書を作成する方法は?


14

サブジェクトの別名属性/拡張子のみに識別情報を含むPKCS#10証明書要求/X.509証明書を作成することはできますか?X.509 4.1.2.6 Subjectによると、subjectAltNameがクリティカルである限り、サブジェクトがCAでない証明書のサブジェクトは空にできます。

しかし、空のdistinguished_nameセクションでこの設定ファイルを使用すると:

# 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:certtest@example.com

およびコマンド

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

OpenSSLの苦情:

error, no objects specified in config file
problems making Certificate Request

回答:


11

これは私のために働いた:

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:certtest@example.com,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

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

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

結果の証明書を表示する

openssl x509 -inform der -in test-no-cn.crt -noout -text

8

また、この「オブジェクトが指定されていません」エラーに遭遇しました。さまざまなフィールドに対して次のようなプロンプトが表示されていました。

US []:

そして、これらの値を.cnfファイルで既に設定していたため、単にEnterキーを押していました。すべての値をもう一度入力する必要があり、それが機能したことがわかりました。


同じことをしなければなりませんでした。構成ファイルに値を入れても、すべてのDNコンポーネントを再度入力するよう求められました。私はそれらを繰り返す必要がありましたが、少なくともうまくいきました。
ネイトW. 14

3
これは、構成ファイルに実際にデフォルト値が含まれていなかったためです。C = USは、Cの「プロンプト」がデフォルト値ではなく「US」であることを意味します。代わりに、ファイルにとを含める必要がC = CountryありC_default = USます。
ヨルダンブトッカー

5
ああ、それが唯一の場合prompt = yes [or blank]です。その場合prompt = noC = US「US」がデフォルト値です。
ヨルダンバトッカー

3

問題はprompt = no元の設定にあります。これはopenssl req、設定ファイルでサブジェクトエントリを指定することを想定しており、req.cで予備チェックをヒットします。

回避策があります:を削除しprompt = no、代わりにコマンドラインに追加-subj /しますopenssl req。CSRと自己署名証明書の両方を生成するスクリプトの例を次に示します。

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:certtest@example.com
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

2

openssl構成ファイルのポリシーセクションで「commonName = optional」を試してください。


1

キーボードから「 "distinguished_name"」グループから任意の1つの値を入力すると正常に機能するようです...

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

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