如何為同一個通用名稱頒發多個證書?
我正在為 Intranet 創建證書頒發機構。
我已經生成了根 CA 和中間 CA,並使用中間 CA 成功簽署了伺服器證書。伺服器證書有
CN=mysite.com
.將來此伺服器證書將過期,我將需要頒發一個新證書。但是,如果我創建另一個具有相同內容的 CSR,
CN=mysite.com
那麼當我簽署它時,我會得到failed to update database TXT_DB error number 2
如果我用不同的 CN 創建一個新的 CSR,這個錯誤就會消失,但 CN 必須相同,否則瀏覽器不會說它是有效的,對吧?
我該如何解決?
編輯:我正在關注本指南——在連結頁面結束之前一切都很好,但是當我嘗試重複此頁面上的步驟以創建第二個證書時,openssl 要求我為新證書提供不同的 CN。
SUBJ="/C=$C/ST=$ST/L=$L/O=$O/OU=$OU/CN=$CN" # Generate CSR echo "$PW" | openssl req \ -config "$CAROOT/intermediate/openssl.cnf" \ -new -sha256 -subj "$SUBJ" -passin stdin \ -key "$PRIV_ENC" -out "$CSR_INT" >/dev/null 2>&1 || { >&2 echo "Could not openssl req"; exit 1; } # Sign CSR openssl ca \ -config "$CAROOT/intermediate/openssl.cnf" \ -batch -extensions server_cert \ -days "$HTTP_DAYS" -notext -md sha256 \ -in "$CSR_INT" -out "$CRT_INT" || { >&2 echo "Could not openssl ca"; exit 1; }
這是
openssl ca
失敗的。
**你需要騙子嗎?**傳統上,瀏覽器和客戶端要求主題名稱的 CommonName欄位與主機名匹配;現代人更喜歡 SubjectAlternativeName (SAN)擴展中的條目這樣做。您可以將其他欄位設置為不同,例如
O=Floo Manufacturing, OU=floo server 2016, CN=www.floo.example.com O=Floo Manufacturing, OU=floo server 2017, CN=www.floo.example.com
並且主題 DN 是唯一的,即使 CommonName 本身不是。或者對於現代客戶端,您可以放入
www.floo.example.com
SAN 並使用完全沒有 CommonName 的唯一主題。但是讓 openssl 做 per-cert SAN 有點不方便。參見例如https://security.stackexchange.com/questions/113484/followup-to-one-liner-to-create-cert-request-with-san允許欺騙:官方方式
在您的配置文件(即
$CAROOT/intermediate/openssl.cnf
)中,轉到CA[somename]
的“部分”(由帶有可選空格的表單行分隔) 。由於您沒有在命令行上使用,因此部分名稱是部分或預設部分中的值(在第一行之前的頂部);在您的連結附近尋找它可能是。添加一行-name``default_ca``[ca]``[somename]``[CA_default]
unique_subject=no
帶間距和以下
# comment
可選。或者,如果您已經有此項目的行更改和/或取消註釋,但在您的連結附近查看您可能沒有。請參閱系統上的手冊頁
ca(1ssl)
或網路上的配置文件選項。允許欺騙:非官方方式
清空(截斷)配置
database
文件,該文件通常**index.txt
在您的連結附近查看,他們顯然使用了該文件。或者編輯該文件並刪除**您要重複使用的主題的行 - 但在這種情況下,您似乎只有一個或幾個,並且您想重複使用它或全部他們,所以清空文件更簡單。