Ssl-Certificate

如何為同一個通用名稱頒發多個證書?

  • November 7, 2019

我正在為 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.comSAN 並使用完全沒有 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在您的連結附近查看,他們顯然使用了該文件。或者編輯該文件並刪除**您要重複使用的主題的行 - 但在這種情況下,您似乎只有一個或幾個,並且您想重複使用它或全部他們,所以清空文件更簡單。

引用自:https://serverfault.com/questions/810557