Openssl
如何配置客戶端瀏覽器證書以由伺服器進行身份驗證?
我目前被要求在與客戶合作時使用一種奇怪的身份驗證格式,並希望得到澄清。
客戶端使用帶有客戶端證書身份驗證的 HTTPS,因此我將在我的瀏覽器中安裝他們提供的證書作為身份驗證形式。
作為第二步,他們還要求我創建自己的證書並讓 CA 對其進行簽名,然後向他們提供證書和 CA,以便將伺服器配置為通過客戶端進行身份驗證。
雖然我可以從命令行使用 openssl 創建證書,對其進行簽名並將其發送給他們,但此時如何驗證/驗證我的瀏覽器?
所以這裡又是工作流程:
- 您生成一個密鑰對並保護私鑰。
- 您制定所謂的證書籤名請求(CSR)。
- 您將其發送給他們的 CA。
- 您取回由他們的 CA 簽名的證書並安裝它(連同私鑰),以便您的瀏覽器可以使用它。
另請注意,雖然您可以在此步驟中用自簽名證書替換 CSR,但這肯定是一種非標準的處理方式,但應該可以。最後你還是會使用他們的證書,因為它有受信任的 CA 的簽名。
現在在 TLS 握手期間,伺服器可以選擇請求客戶端證書。伺服器也可以在這裡明確地提供接受的 CA。這將在您的瀏覽器中觸發一個對話框,要求您選擇用於身份驗證的證書。
然後,您的瀏覽器使用與所選證書關聯的私鑰對迄今為止的 TLS 握手記錄進行簽名,並將證書和簽名發送到伺服器。這證明了私鑰的擁有,從而證明您是證書的合法所有者,這向伺服器確認了您的身份。
如果這對您來說“太高級”,您還可以查看Wikipedia上的更多詳細資訊或查看RFC5246中的完整圖片。
我被要求將其發送到我選擇的 CA 進行簽名,然後將我的公鑰發送給客戶端以進行配置。
在這種情況下,他們可能會使用受信任 CA 的標準列表之一。然後,您從所述 CA 獲得證書。他們可能會要求您提供應用程序級別辨識的公鑰,即 TLS 引擎將為應用程序提供您的客戶端證書,然後根據嵌入的公鑰映射您的實際身份。我在這裡有點看不到的是,如果他們無論如何都會通過所述公鑰對您進行身份驗證,為什麼他們不能讓您擁有任何包含正確公鑰(甚至是自簽名的)的證書。