私の開発環境には、小規模の自己署名CAが設定されています。さまざまな属性を持つさまざまなサーバー証明書を作成したいと思います。私のアプローチは、各サーバーに特定の拡張を作成することです。次のセクションを含む大きな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
openssl
次に、パラメータを使用してCSRを作成するとき-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証明書を発行するように促す可能性があります。