OpenSSL 簽署帶有擴充功能的請求

OpenSSL 簽署帶有擴充功能的請求

我為我的開發環境設定了一個小型自簽名 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 憑證。

相關內容