設置 Apache 相互身份驗證
我被要求設置一個 Apache 網路伺服器以使用相互身份驗證,以保護對特定文件夾/文件的訪問。
僅當客戶端發送受信任的自簽名客戶端證書時,才應授予對該特定文件/文件夾的訪問權限。
在網路伺服器上,我已經使用由受信任的 CA 簽名的有效證書設置了 HTTPS(這是最簡單的部分)
我從來沒有做過這樣的事情,我不知道從哪裡開始以及如何檢查它是否有效。
我也不知道客戶端應該向我發送哪些文件來開始設置:我想他們應該發送客戶端證書和他們用來簽署證書的 CA,這是最好的方法嗎?
你能幫我設置一下嗎?
您可以查看有關此主題的多個線上教程中的任何一個。
基本上,您通常啟動 TLS,然後添加需要客戶端證書的授權規則:
SSLVerifyClient require
這將導致訪問失敗,並且瀏覽器會要求客戶在可用的證書中進行選擇,這些證書必須已經安裝在客戶端作業系統或瀏覽器中。一旦選擇的證書載入到客戶端,它將自動發送到伺服器。
現在,添加也
SSLOptions +StdEnvVars
將告訴 Apache 從證書中提取資訊,這將允許您區分使用者。現在您在環境中擁有了這些寶貴的資訊,並且可以在應用程序或 Apache 中使用它來進一步進行身份驗證。
你想要的環境變數可能是
SSL_CLIENT_S_<something>
.SSL_CLIENT_S_DN_CN
是客戶端證書中的公用名。然後,您可以根據需要限制客戶端的參數:SSLRequireSSL SSLOptions +StdEnvVars +ExportCertData +OptRenegotiate +FakeBasicAuth SSLVerifyClient require SSLRequire %{SSL_CLIENT_I_DN_CN} eq "Issuer DN's Common Name" and %{SSL_CLIENT_S_DN_O} eq "Subject DN's Organisation" and %{SSL_CLIENT_S_DN_CN} eq "Leonardo Serni"
請注意,正如@UlrichSchwarz 正確指出的那樣,您應該強制執行 Certification Authority。否則,任何人都可以自行簽署一份說明任何內容的證書,而你一點也不聰明。
因此,您應該創建自己的 CA,並使用它來生成簽名證書,然後將其分發給您的客戶端。
更新:I變數與(I)ssuer 相關,而S與(S)主題相關,即進行身份驗證的人(即您的客戶)。您可以在文件中找到完整列表及其含義
mod_ssl
。