Apache-2.2

客戶端證書身份驗證 Apache 2.2

  • April 13, 2017

我的 Debian Linux 上有一個由 Apache 2.2 執行的 Web 伺服器。我在 Apache 中有一個根 CA 和中間 CA。中間 CA 創建了我的 Web 伺服器證書以及客戶端證書。當我的 RADIUS 伺服器提示我輸入憑據時,我想使用客戶端證書的 CN 作為使用者名。我正在查看 Apache 的網站,看起來有些功能很有用(例如 AuthBasicFake),但這些功能僅在 Apache 2.4 中可用。有誰知道解決這個問題的方法?

由於我的 Debian 版本是 Wheezy (7),我不得不使用 apache 2.2 並使用巧妙的解決方法。這是我的 Apache 配置(省略了幾行):

AddRadiusAuth ~~~~~~~~~~~~~~:1812 ~~~~~~~~~ 5:3
AddRadiusCookieValid 60

SSLEngine On
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder On
SSLOptions +FakeBasicAuth

SSLCertificateFile ~~~~~~~~~~~~~~~~~~~~~~
SSLCertificateKeyFile ~~~~~~~~~~~~~~~~~~~~~~
SSLCACertificateFile ~~~~~~~~~~~~~~~~~~~~~~
SSLCACertificatePath ~~~~~~~~~~~~~~~~~~~~~~

<Directory /var/www/>
   SSLVerifyClient require
   SSLVerifyDepth 10
   SSLOptions +StdEnvVars

   Options Indexes FollowSymLinks MultiViews
   DirectoryIndex /cgi-bin/index.html

   AllowOverride None
   Order allow,deny
   Allow from all

   AddHandler mod_python .py
   PythonHandler mod_python.publisher
   PythonDebug On

   AuthType Basic
   AuthName "RADIUS authentication for localhost"
   AuthBasicAuthoritative off
   AuthRadiusAuthoritative on
   AuthBasicProvider radius
   AuthRadiusActive On
   Require valid-user
</Directory>

獲取我證書中的SSLOptions +FakeBasicAuth所有內容並將其用作使用者名並具有“密碼”密碼。我已將 RADIUS 配置為檢查使用者名和密碼。所以我所做的是我創建了客戶端證書,並且只包含了 CN,‘ExampleName’。我將客戶端證書載入到我的瀏覽器上,並在每次使用時啟用它的密碼保護。Apache 將“ExampleName”讀取為“/CN=ExampleName”並將其傳遞給 RADIUS。但是由於某種原因(我猜轉義字元與此有關),RADIUS 將“/CN=ExampleName”讀取為“/CN=3DExampleName”。所以當我配置使用者名和密碼時,它必須是:’/CN=3DExampleName’和’password’。

當我進入我的站點時,我選擇證書,輸入我的密碼(不是“密碼”,我在密碼保護它時選擇的那個)。然後 RADIUS 要求輸入使用者名和密碼。我什麼都不輸入,然後點擊確定,它就可以工作了。我猜 FakeBasicAuth (Apache) 將使用者名“/CN=ExampleName”(變成“/CN=3DExampleName”)和密碼“password”傳遞給 RADIUS。

很抱歉長時間回复(對我自己的問題)。有時我會卡住,也許這會在未來幫助某人。此外,如果有人在不將我的 Debian 更新到 Jessie (8) 或 Apache 2.4 的情況下有更好的解決方法,請告訴我。

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