使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux

使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux
В 我們之前的一篇文章 我們討論了公司企業入口網站上雙重認證的重要性。 上次我們示範如何在 IIS Web 伺服器中設定安全身份驗證。

在評論中,我們被要求為 Linux 最常見的 Web 伺服器 - nginx 和 Apache 編寫說明。

你問——我們寫。

您需要什麼才能開始?

  • 任何現代 Linux 發行版。 我在 MX Linux 18.2_x64 上進行了測試設定。 這當然不是伺服器發行版,但對於 Debian 來說不太可能有任何差異。 對於其他發行版,配置庫的路徑可能略有不同。
  • 令牌。 我們繼續使用該模型 Rutoken EDS PKI,就企業使用的速度特性而言是理想的。
  • 要在 Linux 中使用令牌,您需要安裝以下軟體包:
    libccid libpcsclite1 pcscd pcsc-tools opensc

使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux

頒發證書

在先前的文章中,我們依賴伺服器和用戶端憑證將使用 Microsoft CA 頒發的事實。 但由於我們在 Linux 中設定所有內容,因此我們還將告訴您另一種頒發這些憑證的方法 - 無需離開 Linux。
我們將使用 XCA 作為 CA (https://hohnstaedt.de/xca/),可在任何現代 Linux 發行版上使用。 我們將在 XCA 中執行的所有操作都可以使用 OpenSSL 和 pkcs11-tool 實用程式在命令列模式下完成,但為了更簡單和清晰,我們不會在本文中介紹它們。

入門

  1. 安裝:
    $ apt-get install xca
  2. 我們運行:
    $ xca
  3. 我們為 CA 建立資料庫 - /root/CA.xdb
    我們建議將憑證授權單位資料庫儲存在只有管理員有權存取的資料夾中。 這對於保護根憑證的私鑰非常重要,根憑證用於簽署所有其他憑證。

建立金鑰和根 CA 憑證

公鑰基礎設施 (PKI) 是基於分層系統。 這個系統中最主要的是根憑證授權單位或根CA。 必須先建立其證書。

  1. 我們為 CA 建立 RSA-2048 私鑰。 為此,請在選項卡上 私鑰新的密鑰 並選擇合適的類型。
  2. 為新密鑰對設定名稱。 我稱之為 CA 金鑰。
  3. 我們使用建立的金鑰對自行頒發 CA 憑證。 為此,請轉到選項卡 證書 並按 新證書.
  4. 一定要選擇 SHA-256,因為使用 SHA-1 不再被認為是安全的。
  5. 一定要選擇作為模板 [預設] CA。 別忘了點擊 全部應用,否則不套用模板。
  6. 在選項卡中 主題 選擇我們的密鑰對。 您可以在那裡填寫證書的所有主要欄位。

使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux

建立密鑰和 https 伺服器證書

  1. 以類似的方式,我們為伺服器建立一個RSA-2048私鑰,我稱之為Server Key。
  2. 建立憑證時,我們選擇伺服器憑證必須使用CA憑證進行簽章。
  3. 不要忘記選擇 SHA-256.
  4. 我們選擇作為模板 [預設] HTTPS_伺服器。 點選 全部應用.
  5. 然後在選項卡上 主題 選擇我們的密鑰並填寫必填欄位。

使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux

為使用者建立密鑰和證書

  1. 用戶的私鑰將儲存在我們的令牌中。 要使用它,您需要從我們的網站安裝 PKCS#11 庫。 對於流行的發行版,我們分發現成的軟體包,位於此處 - https://www.rutoken.ru/support/download/pkcs/。 我們還有arm64、armv7el、armv7hf、e2k、mipso32el的程式集,可以從我們的SDK下載 - https://www.rutoken.ru/developers/sdk/。 除了適用於 Linux 的組件外,還有適用於 macOS、freebsd 和 android 的組件。
  2. 在 XCA 中新增新的 PKCS#11 提供者。 為此,請轉到菜單 選項 到選項卡 PKCS#11 供應商.
  3. 我們按 加入 並選擇 PKCS#11 庫的路徑。 就我而言,它是 usrliblibrtpkcs11ecp.so。
  4. 我們需要一個格式化的 Rutoken EDS PKI 令牌。 下載 rtAdmin 實用程式 - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. 我們開展
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. 我們選擇 Rutoken EDS PKI 的 RSA-2048 金鑰作為金鑰類型。 我將這個密鑰稱為「客戶端密鑰」。

    使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux

  7. 輸入 PIN 碼。 我們等待金鑰對的硬體產生完成

    使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux

  8. 與伺服器憑證類比,我們為使用者建立一個憑證。 這次我們選擇一個模板 [預設] HTTPS_客戶端 並且不要忘記點擊 全部應用.
  9. 在選項卡中 主題 輸入有關使用者的信息。 我們對保存令牌證書的請求做出肯定的回答。

結果,在選項卡上 認證 在 XCA 中你應該得到這樣的東西。

使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux
這組最小的密鑰和憑證足以開始設定伺服器本身。

設定時,我們需要匯出CA憑證、伺服器憑證和伺服器私鑰。

為此,請在 XCA 中相應標籤上選擇所需條目,然後按一下 出口.

Nginx的

我不會寫如何安裝和運行 nginx 伺服器 - 互聯網上有足夠多的關於此主題的文章,更不用說官方文件了。 讓我們直接使用令牌設定 HTTPS 和雙重認證。

將以下行新增至 nginx.conf 中的伺服器部分:

server {
	listen 443 ssl;
	ssl_verify_depth 1;
	ssl_certificate /etc/nginx/Server.crt;
	ssl_certificate_key /etc/nginx/ServerKey.pem;
	ssl_client_certificate /etc/nginx/CA.crt;
	ssl_verify_client on;
}

與在 nginx 中配置 ssl 相關的所有參數的詳細說明可以在這裡找到 - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

我將簡單描述一下我問自己的那些問題:

  • ssl_verify_client - 指定需要驗證憑證的信任鏈。
  • ssl_verify_depth - 定義鏈中受信任根憑證的搜尋深度。 由於我們的客戶端憑證是立即在根憑證上簽署的,因此深度設定為1。如果使用者憑證是在中間CA上簽署的,則必須在此參數中指定2,依此類推。
  • ssl_client_certificate - 指定受信任根憑證的路徑,在檢查使用者憑證中的信任時使用該路徑。
  • ssl_certificate/ssl_certificate_key - 指示伺服器憑證/私鑰的路徑。

不要忘記執行 nginx -t 檢查配置中是否有拼字錯誤,以及所有檔案是否位於正確的位置,等等。

就這樣! 如您所見,設定非常簡單。

檢查它在 Firefox 中是否正常工作

由於我們完全在 Linux 中完成所有操作,因此我們假設我們的使用者也在 Linux 中工作(如果他們有 Windows,那麼 請參閱上一篇文章中有關設定瀏覽器的說明.

  1. 讓我們啟動 Firefox。
  2. 我們先嘗試在沒有令牌的情況下登入。 我們得到這張圖:

    使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux

  3. 讓我們去 約:喜好#隱私,我們去 安全裝置...
  4. 我們按 加載新增新的 PKCS#11 裝置驅動程式並指定 librtpkcs11ecp.so 的路徑。
  5. 要檢查憑證是否可見,您可以訪問 證書管理器。 系統將提示您輸入 PIN 碼。 輸入正確後,您可以查看選項卡上的內容 您的證書 我們的令牌證書出現了。
  6. 現在讓我們使用令牌。 Firefox 會提示您選擇將為伺服器選擇的憑證。 選擇我們的證書。

    使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux

  7. 利潤!

    使用 USB 令牌在網站上進行兩因素身份驗證。 現在也適用於 Linux

設定完成一次,正如您在憑證要求視窗中看到的那樣,我們可以保存我們的選擇。 此後,每次登入入口網站時,我們只需插入令牌並輸入格式化期間指定的使用者 PIN 碼即可。 經過這樣的身份驗證後,伺服器已經知道哪個用戶登入了,你不能再創建任何額外的視窗進行驗證,而是立即讓用戶進入他的個人帳戶。

阿帕奇

就像 nginx 一樣,安裝 apache 應該不會有任何問題。 如果您不知道如何安裝此網頁伺服器,請使用官方文件。

我們開始設定 HTTPS 和雙重認證:

  1. 首先你需要啟動mod_ssl:
    $ a2enmod ssl
  2. 然後啟用網站的預設 HTTPS 設定:
    $ a2ensite default-ssl
  3. 現在我們編輯設定檔:/etc/apache2/sites-enabled/default-ssl.conf:
        SSLEngine on
        SSLProtocol all -SSLv2
    
        SSLCertificateFile	/etc/apache2/sites-enabled/Server.crt
        SSLCertificateKeyFile /etc/apache2/sites-enabled/ServerKey.pem
    
        SSLCACertificateFile /etc/apache2/sites-enabled/CA.crt
    
        SSLVerifyClient require
        SSLVerifyDepth  10

    可以看到,參數的名稱幾乎與nginx中的參數名稱一致,所以我不再解釋它們。 再次強調,歡迎任何對詳細資訊感興趣的人查看該文件。
    現在我們重新啟動我們的伺服器:

    $ service apache2 reload
    $ service apache2 restart

  4. 如您所看到的,在任何 Web 伺服器上設定雙重認證(無論是在 Windows 還是 Linux 上)最多需要一小時。 設定瀏覽器大約需要 5 分鐘。 許多人認為設定和使用雙重認證很困難且不清楚。 我希望我們的文章能夠揭穿這個神話,至少一點點。

只有註冊用戶才能參與調查。 登入, 請。

您是否需要根據 GOST 34.10-2012 使用憑證設定 TLS 的說明:

  • 是的,TLS-GOST非常有必要

  • 不,使用 GOST 演算法進行調優並不有趣

44 位用戶投票。 9 名用戶棄權。

來源: www.habr.com

添加評論