Linux

設置 Apache 相互身份驗證

  • January 12, 2020

我被要求設置一個 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

引用自:https://unix.stackexchange.com/questions/561696