USBトークンを使用したサイトでのXNUMX要素認証。 Linux にも対応しました

USBトークンを使用したサイトでのXNUMX要素認証。 Linux にも対応しました
В 以前の記事の XNUMX つ 企業のポータルサイトにおける二要素認証の重要性についてお話しました。 前回は、IIS Web サーバーで安全な認証を設定する方法を説明しました。

コメントでは、Linux 用の最も一般的な Web サーバーである nginx と Apache の手順を書くように求められました。

あなたは尋ねました - 私たちは書きました。

始めるには何が必要ですか?

  • 最新の Linux ディストリビューション。 MX Linux 18.2_x64 でテストセットアップを行いました。 もちろん、これはサーバー ディストリビューションではありませんが、Debian では違いはほとんどありません。 他のディストリビューションでは、構成ライブラリへのパスが若干異なる場合があります。
  • トークン。 モデルを使い続けます ルトケン EDS PKI、速度特性の点で法人用途に最適です。
  • Linux でトークンを使用するには、次のパッケージをインストールする必要があります。
    libccid libpcsclite1 pcscd pcsc-tools opensc

USBトークンを使用したサイトでのXNUMX要素認証。 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-256SHA-1 の使用はもはや安全であるとは考えられないためです。
  5. 必ずテンプレートとして選択してください [デフォルト] CA。 忘れずにクリックしてください すべて適用そうでない場合、テンプレートは適用されません。
  6. タブ 件名 キーペアを選択してください。 そこで、証明書のすべての主要フィールドに入力できます。

USBトークンを使用したサイトでのXNUMX要素認証。 Linux にも対応しました

キーと https サーバー証明書の作成

  1. 同様の方法で、サーバーの RSA-2048 秘密キーを作成します。これをサーバー キーと呼びます。
  2. 証明書を作成するときに、サーバー証明書が CA 証明書で署名される必要があることを選択します。
  3. 忘れずに選択してください SHA-256.
  4. テンプレートとして選択します [デフォルト] HTTPSサーバー。 クリック すべて適用.
  5. 次にタブ上で 件名 キーを選択し、必須フィールドに入力します。

USBトークンを使用したサイトでのXNUMX要素認証。 Linux にも対応しました

ユーザーのキーと証明書を作成する

  1. ユーザーの秘密キーはトークンに保存されます。 これを使用するには、当社の Web サイトから 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. 新しい PKCS#11 プロバイダーを XCA に追加します。 これを行うには、メニューに移動します オプション タブへ PKCS#11 プロバイダー.
  3. 触れ<XNUMXxXNUMX><XNUMXxXNUMX>м<XNUMXxDXNUMX><XNUMXxDXNUMX><XNUMXxXNUMX> Add をクリックして、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トークンを使用したサイトでのXNUMX要素認証。 Linux にも対応しました

  7. PINコードを入力します。 そして、キーペアのハードウェア生成が完了するのを待ちます。

    USBトークンを使用したサイトでのXNUMX要素認証。 Linux にも対応しました

  8. サーバー証明書と同様に、ユーザーの証明書を作成します。 今回はテンプレートを選択します [デフォルト] HTTPS_クライアント クリックすることを忘れないでください すべて適用.
  9. タブ 件名 ユーザーに関する情報を入力します。 トークンの証明書を保存するという要求に対して肯定的に答えます。

その結果、タブ上で 証明書 XCA では次のような結果が得られるはずです。

USBトークンを使用したサイトでのXNUMX要素認証。 Linux にも対応しました
この最小限のキーと証明書のセットは、サーバー自体のセットアップを開始するのに十分です。

設定するには、CA 証明書、サーバー証明書、およびサーバー秘密キーをエクスポートする必要があります。

これを行うには、XCA の対応するタブで目的のエントリを選択し、 輸出.

nginx

nginx サーバーをインストールして実行する方法については書きません。公式ドキュメントは言うまでもなく、このトピックに関する記事はインターネット上に十分にあります。 トークンを使用した HTTPS と XNUMX 要素認証の設定に直接進みましょう。

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トークンを使用したサイトでのXNUMX要素認証。 Linux にも対応しました

  3. 続けます about:preferences#プライバシー、そして私たちは行きます セキュリティデバイス…
  4. 触れ<XNUMXxXNUMX><XNUMXxXNUMX>м<XNUMXxDXNUMX><XNUMXxDXNUMX><XNUMXxXNUMX> 負荷新しい PKCS#11 デバイス ドライバーを追加し、librtpkcs11ecp.so へのパスを指定します。
  5. 証明書が表示されていることを確認するには、次の場所に移動します。 証明書マネージャ。 PIN の入力を求められます。 正しく入力すると、タブの内容を確認できます あなたの証明書 トークンからの証明書が表示されました。
  6. それでは、トークンを使ってみましょう。 Firefox では、サーバー用に選択される証明書を選択するよう求められます。 当社の証明書を選択してください。

    USBトークンを使用したサイトでのXNUMX要素認証。 Linux にも対応しました

  7. 利益!

    USBトークンを使用したサイトでのXNUMX要素認証。 Linux にも対応しました

セットアップは一度完了し、証明書要求ウィンドウに表示されているように、選択内容を保存できます。 これ以降、ポータルにログインするたびに、トークンを挿入し、フォーマット中に指定したユーザー PIN コードを入力するだけで済みます。 このような認証の後、サーバーはどのユーザーがログインしたかをすでに認識しているため、検証用に追加のウィンドウを作成することはできなくなり、ただちにユーザーを個人アカウントにログインさせることができます。

アパッチ

nginx と同様に、Apache のインストールに問題がある人はいないはずです。 この Web サーバーのインストール方法がわからない場合は、公式ドキュメントを参照してください。

そして、HTTPS と XNUMX 要素認証の設定を開始します。

  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. ご覧のとおり、Windows であっても Linux であっても、Web サーバーで 5 要素認証をセットアップするには最大 XNUMX 時間かかります。 ブラウザのセットアップには約 XNUMX 分かかります。 多くの人は、XNUMX 要素認証の設定と操作は難しくてわかりにくいと考えています。 私たちの記事がこの通説の誤りを少なくとも少しでも暴いてくれることを願っています。

登録ユーザーのみがアンケートに参加できます。 ログインお願いします。

GOST 34.10-2012 に従って証明書を使用して TLS を設定する手順が必要ですか:

  • はい、TLS-GOST は非常に必要です

  • いいえ、GOST アルゴリズムによるチューニングは面白くありません

44 人のユーザーが投票しました。 9名のユーザーが棄権した。

出所: habr.com

コメントを追加します