帶有副檔名的 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
然後,當我使用創建我的 csr 時,
openssl
我使用參數-config myCustomOpenssl.cnf -reqexts server0_http
。當我查看我的請求時,openssl req -text -noout -in myrequest.csr
一切看起來都很完美。但是,在我簽署請求後,“X509v3 Extended Key Usage”和“X509v3 Subject Alternative Name”部分就消失了。為了解決這個問題,我還將
-extfile myCustomOpenssl.cnf -reqexts server0_http
簽名呼叫的參數放入openssl
.這是預期的行為嗎?我一直認為單獨的 csr 文件必須足以按要求創建證書,即包含所有部分。我的系統現在的工作方式是我獲得了一個缺少部分的證書。要獲得我想要的證書,我必須提供 csr 文件和我用來創建請求的 openssl 配置文件中的相應部分。這對我的小型設置來說沒有問題,但是如果我成為更大的 CA,這會變得非常混亂。應該是這樣還是我錯誤地使用了openssl?
找到了!我描述的是openssl的正常預期行為。預設情況下,自定義擴展不會復製到證書中。
要使 openssl 將請求的擴展複製到證書,必須指定
copy_extensions = copy
簽名。在原版安裝中,這意味著必須將此行添加default_CA
到openssl.cnf
.在
openssl.cnf
(至少)Centos 附帶的版本中,該行已作為註釋包含在內,並帶有“謹慎使用”的警告。如果您不小心,請求者可能會濫用它來讓您頒發 CA 證書。