X.509 證書的唯一分配給每個客戶端
我正在嘗試在由不超過 100 個客戶端組成的域中實現一個小規模的電子投票應用程序。系統管理員可以創建新的選舉實例,並且每個客戶可以為每次選舉投一次票。
我確實相信這裡需要 PKI(例如 OpenSSL)才能為每個客戶端頒發 X.509 證書。註冊後,客戶端將向系統提供唯一標識碼,因此一個明顯的選擇是將此值儲存在“主題唯一標識符”欄位中,這在版本 3 中是可能的。
我想了解的是 CA 將如何保留該欄位的唯一性?它是否將新證書提供的值與之前頒發的每個證書進行比較?這甚至是這個問題的合乎邏輯的解決方案嗎?
在典型的 X.509 PKI 實現中,CA 在某種程度上是重量級的。執行 CA 不僅僅是一個特殊的 CA 認證,執行 CA 通常意味著執行一個 Web 服務來服務證書請求,可能是一個 OCSP 響應程序,定期發布 CRL,可能是一個 SCEP 伺服器……這個重量級的概念適用於大型企業,但在某種程度上對於像您自己這樣的小型部署不太好。但是,請接受它,因為對於輕量級部署確實沒有一個好的解決方案。
我想說的是,是的,在這種情況下,“正確”的解決方案是讓 CA 在頒發新證書之前檢查以確保它沒有向該使用者頒發證書。對於小型部署來說,這是一個相當煩人的額外要求,但與“標準” X.509 部署預計會做的所有其他瘋狂事情相比,這是一項完全微不足道的任務。我感覺到你的痛苦,而且我知道這不是很優雅,但在這種情況下,最簡單的解決方案是只保留迄今為止提供的所有 ID 程式碼的列表,如果重新送出則失敗。
在理想情況下,您可以將您正在談論的唯一標識符映射到唯一鍵,因此重新發布不會成為問題。但是,這對於 X.509 是不可行的。
PS:我在這裡假設您實際上想要做問題標題所說的:只為每個使用者分配一個證書。相反,如果您只需要在選舉期間防止重複投票,您可以只記錄已投票的每個人的主題唯一 ID,這將使同一唯一 ID 擁有多個證書毫無用處。更改投票應用程序的邏輯可能比更改頒發證書的任何 CA 服務的邏輯更容易。