
開発環境用に小さな自己署名 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_CA
openssl.cnf
openssl.cnf
(少なくとも) Centos に同梱されているでは、この行は既にコメントとして含まれており、「注意して使用してください」という警告が付いています。注意しないと、要求者がこれを悪用して CA 証明書を発行させる可能性があります。