OpenSSL は拡張機能を使用してリクエストに署名します

OpenSSL は拡張機能を使用してリクエストに署名します

開発環境用に小さな自己署名 CA を設定しました。さまざまなプロパティを持つさまざまなサーバー証明書を作成したいと思います。私のアプローチは、各サーバーに特定の拡張セクションを作成することです。次のようなセクションを含む 1 つの大きな openssl.cnf があります。

[ server0_http ]

nsCertType                      = server
nsComment                       = "HTTP server0"
basicConstraints=CA:FALSE
extendedKeyUsage=serverAuth
subjectAltName=@server0_http_altnames

[ server0_http_altnames ]
URI.1 = https://server.domain.tld
URI.2 = http://server.domain.tld
IP.1  = 1.2.3.4
DNS.1 = server.doamin.tld

次に、 csr を作成するときに、opensslパラメータを使用します-config myCustomOpenssl.cnf -reqexts server0_http。 を使用したリクエストを確認すると、openssl req -text -noout -in myrequest.csrすべてが完璧に見えます。

しかし、リクエストに署名した後、「X509v3 拡張キー使用法」セクションと「X509v3 サブジェクト代替名」セクションが消えてしまいます。この問題を解決するために、-extfile myCustomOpenssl.cnf -reqexts server0_http署名呼び出しのパラメータも に追加しましたopenssl

これは想定された動作ですか? 要求どおりに、つまりすべてのセクションを含む証明書を作成するには、csr ファイルだけで十分だと常に思っていました。現在のシステムの動作では、セクションが欠落した証明書が取得されます。必要な証明書を取得するには、csr ファイルと、要求の作成に使用した openssl 構成ファイルの対応するセクションを提供する必要があります。これは私の小規模なセットアップでは問題ありませんが、大規模な CA になるとかなり面倒になります。これはそのようになっているのでしょうか、それとも openssl の使い方が間違っているのでしょうか?

答え1

見つかりました! 私が説明したのは、openssl の通常の予想される動作です。デフォルトでは、カスタム拡張機能は証明書にコピーされません。

openssl に要求された拡張機能を証明書にコピーさせるには、署名を指定する必要があります。通常のインストールでは、この行をのcopy_extensions = copyセクションに追加する必要があります。default_CAopenssl.cnf

openssl.cnf(少なくとも) Centos に同梱されているでは、この行は既にコメントとして含まれており、「注意して使用してください」という警告が付いています。注意しないと、要求者がこれを悪用して CA 証明書を発行させる可能性があります。

関連情報