スマートカードを使用したパススルー認証
ユーザーは、Linux仮想デスクトップセッションにログオンするときに、クライアントデバイスに接続されたスマートカードを認証に使うことができます。この機能は、ICAスマートカード仮想チャネル上でのスマートカードのリダイレクトによって実装されます。ユーザーはセッション内でスマートカードを使用することもできます。使用例としては、ドキュメントにデジタル署名を追加する、電子メールを暗号化または復号化する、スマートカード認証が必要なWebサイトを認証するなどがあります。
Linux VDAは、この機能にWindows VDAと同じ構成を使用します。詳しくは、この記事の「スマートカード環境を構成する」セクションを参照してください。
注:
Linux VDAセッション内でマップされたスマートカードを使用してCitrix Gatewayにサインオンすることは、公式にはサポートされていません。
前提条件
スマートカードによるパススルー認証を使用できるかは、次の条件により異なります:
-
Linux VDAが、次のいずれかのディストリビューションにインストールされている:
- RHEL 8/CentOS 8
- RHEL 7/CentOS 7
- Ubuntu 20.04
- Ubuntu 18.04
- Ubuntu 16.04
VDAのインストールが完了したら、VDAがDelivery Controllerに登録でき、公開されたLinuxデスクトップセッションがWindows資格情報を使用して正常に起動できることを確認します。
-
OpenSCがサポートするスマートカードが使用されている。詳しくは、「OpenSCがスマートカードをサポートしていることの確認」を参照してください。
-
Windows向けCitrix Workspaceアプリが使用されている。
OpenSCがスマートカードをサポートしていることの確認
OpenSCは、RHEL 7.4以降で広く使用されているスマートカードドライバーです。OpenSCはCoolKeyと完全に互換性がある後継で、さまざまな種類のスマートカードをサポートします(「Smart Card Support in Red Hat Enterprise Linux」を参照)。
この記事では、構成を説明するための例として、YubiKey 4スマートカードを使用します。YubiKey 4は、Amazonや他の小売業者から簡単に購入できる一体型のUSB CCID PIVデバイスです。OpenSCドライバーは、YubiKey 4をサポートしています。
もっと高度なスマートカードが必要になった場合は、RHEL 7またはRHEL 8とOpenSCパッケージがインストールされた物理マシンを準備します。OpenSCのインストールについては、「スマートカードドライバーをインストールする」を参照してください。スマートカードを挿入し、次のコマンドを実行して、OpenSCがスマートカードをサポートしていることを確認します:
pkcs11-tool --module opensc-pkcs11.so --list-slots
構成
ルート証明書を準備する
ルート証明書は、スマートカード内の証明書を検証するために使用されます。ルート証明書をダウンロードしてインストールするには、次の手順を実行します。
-
通常はCAサーバーから、ルート証明書をPEM形式で取得します。
次のようなコマンドを実行して、DERファイル(*.crt、*.cer、*.der)をPEMに変換できます。次のコマンド例では、certnew.cer はDERファイルです。
openssl x509 -inform der -in certnew.cer -out certnew.pem <!--NeedCopy-->
-
ルート証明書を
openssl
ディレクトリにインストールします。例として certnew.pem ファイルを使用しています。cp certnew.pem <path where you install the root certificate> <!--NeedCopy-->
ルート証明書をインストールするためのパスを作成するには、
sudo mdkir -p <path where you install the root certificate>
を実行します。
RHEL 8/CentOS 8でpam_krb5モジュールを構築する
スマートカード認証は、RHEL 8/CentOS 8で廃止されたpam_krb5モジュールに依存します。RHEL 8/CentOS 8でスマートカード認証を使用するには、以下の手順でpam_krb5モジュールを構築します:
-
https://centos.pkgs.org/7/centos-x86_64/pam_krb5-2.4.8-6.el7.x86_64.rpm.htmlからpam_krb5-2.4.8-6ソースコードをダウンロードします。
-
RHEL 8/CentOS 8でpam_krb5モジュールを構築してインストールします。
yum install -y opensc pcsc-lite pcsc-lite-libs pcsc-lite-ccid nss-tools yum install gcc krb5-devel pam-devel autoconf libtool rpm2cpio pam_krb5-2.4.8-6.el7.src.rpm | cpio –div tar xvzf pam_krb5-2.4.8.tar.gz cd pam_krb5-2.4.8 ./configure --prefix=/usr make make install <!--NeedCopy-->
-
/usr/lib64/security/にpam_krb5.soが作成されたことを確認します。
ls -l /usr/lib64/security | grep pam_krb5 <!--NeedCopy-->
スマートカード環境を構成する
ctxsmartlogon.shスクリプトを使用してスマートカード環境を構成するか、手動で構成を完了することができます。
(オプション1)ctxsmartlogon.shスクリプトを使用してスマートカード環境を構成する
注:
ctxsmartlogon.shスクリプトは、PKINIT情報をデフォルトの領域に追加します。この設定は、/etc/krb5.conf構成ファイルを使用して変更できます。
スマートカードを初めて使用する前に、ctxsmartlogon.shスクリプトを実行してスマートカード環境を構成します。
sudo /opt/Citrix/VDA/sbin/ctxsmartlogon.sh
<!--NeedCopy-->
結果は次のようになります:
スマートカードを無効にするには:
sudo /opt/Citrix/VDA/sbin/ctxsmartlogon.sh
<!--NeedCopy-->
結果は次のようになります:
(オプション2)スマートカード環境を手動で構成する
Linux VDAは、Windows VDAと同じスマートカード環境を使用します。この環境では、ドメインコントローラー、Microsoft証明機関(CA)、インターネットインフォメーションサービス、Citrix StoreFront、Citrix Workspaceアプリなど、複数のコンポーネントを構成する必要があります。YubiKey 4スマートカードに基づく構成について詳しくは、Knowledge CenterのCTX206156の記事を参照してください。
次の手順に進む前に、すべてのコンポーネントが正しく構成されていること、秘密キーとユーザー証明書がスマートカードにダウンロードされていること、スマートカードを使用してWindows VDAに正常にログオンできることを確認してください。
PC/SC Liteパッケージをインストールする
PCSC Liteは、Linuxでのパーソナルコンピューター/スマートカード(PC/SC)仕様の実装です。スマートカードやリーダーと通信するためのWindowsスマートカードインターフェイスを提供します。Linux VDAでのスマートカードリダイレクトは、PC/SCレベルで実装されています。
次のコマンドを実行して、PC/SC Liteパッケージをインストールします。
yum install pcsc-lite pcsc-lite-ccid pcsc-lite-libs
<!--NeedCopy-->
スマートカードドライバーをインストールする
OpenSCは、RHEL上で広く使用されているスマートカードドライバーです。OpenSCがインストールされていない場合は、次のコマンドを実行してインストールします。
yum install opensc
<!--NeedCopy-->
スマートカード認証用のPAMモジュールをインストールする
次のコマンドを実行して、pam_krb5およびkrb5-pkinitモジュールをインストールします。
RHEL 7/CentOS 7:
yum install pam_krb5 krb5-pkinit
<!--NeedCopy-->
RHEL 8/CentOS 8:
yum install krb5-pkinit
<!--NeedCopy-->
Ubuntu 20.04、Ubuntu 18.04、Ubuntu 16.04:
apt-get install libpam-krb5 krb5-pkinit
<!--NeedCopy-->
pam_krb5モジュールもプラグイン可能な認証モジュールであり、PAM対応アプリケーションがパスワードを確認したり、キー配布センター(KDC)のチケット配布チケットを取得したりするために、このモジュールを使用できます。krb5-pkinitモジュールにはPKINITプラグインが含まれていて、クライアントが秘密キーと証明書を使用してKDCから初期資格情報を取得できるようにします。
pam_krb5モジュールを構成する
pam_krb5モジュールはKDCと対話して、スマートカード内の証明書を使用してKerberosチケットを取得します。PAMでpam_krb5認証を有効にするには、次のコマンドを実行します:
authconfig --enablekrb5 --update
<!--NeedCopy-->
/etc/krb5.conf 構成ファイルに、実際の領域に応じたPKINIT情報を追加します。
注:
pkinit_cert_matchオプションは、クライアント証明書がPKINIT認証の試行に使用される前に一致する必要がある一致規則を指定します。一致規則の構文は次のとおりです:
[relation-operator] component-rule …
。
relation-operator
は&&
(すべてのコンポーネント規則が一致する必要がある)または||(1つのコンポーネント規則のみが一致する必要がある)のいずれかを使用できます。
汎用krb5.confファイルの例を次に示します:
EXAMPLE.COM = {
kdc = KDC.EXAMPLE.COM
auth_to_local = RULE:[1:$1@$0]
pkinit_anchors = FILE:<path where you install the root certificate>/certnew.pem
pkinit_kdc_hostname = KDC.EXAMPLE.COM
pkinit_cert_match = ||<EKU>msScLogin,<KU>digitalSignature
pkinit_eku_checking = kpServerAuth
}
<!--NeedCopy-->
構成ファイルは、PKINIT情報を追加した後、次のようになります。
PAM認証を構成する
PAM構成ファイルは、どのモジュールをPAM認証に使用しているかを示します。pam_krb5を認証モジュールとして追加するには、/etc/pam.d/smartcard-authファイルに次の行を追加します:
auth [success=done ignore=ignore default=die] pam_krb5.so preauth_options=X509_user_identity=PKCS11:<path to the pkcs11 driver>/opensc-pkcs11.so
SSSDを使用した場合、変更後の構成ファイルは次のようになります。
(オプション)スマートカードを使用したシングルサインオン
シングルサインオン(SSO)とは、仮想デスクトップやアプリケーションの起動時にパススルー認証を実装するCitrixの機能を指します。この機能により、ユーザーがPINを入力する回数が減ります。Linux VDAでSSOを使用するには、Citrix Workspaceアプリを構成します。Windows VDAと同じ構成方法です。詳しくは、Knowledge Centerの記事CTX133982を参照してください。
Citrix Workspaceアプリでグループポリシーを構成するときは、次のようにスマートカード認証を有効にします。
高速スマートカードログオン
高速スマートカードは、既存のHDX PC/SCベースのスマートカードリダイレクトの改良版です。遅延が大きいWAN環境でスマートカードを使用する場合のパフォーマンスが向上しています。詳しくは、「スマートカード」を参照してください。
Linux VDAは、以下のバージョンのCitrix Workspaceアプリで高速スマートカードをサポートしています:
- Citrix Receiver for Windows 4.12
- Windows向けCitrix Workspaceアプリ1808以降
クライアントで高速スマートカードログオンを有効にする
高速スマートカードログオンは、VDAではデフォルトで有効になっており、クライアントではデフォルトで無効になっています。クライアントで高速スマートカードログオンを有効にするには、関連するStoreFrontサイトのdefault.icaファイルに次のパラメーターを追加します:
[WFClient]
SmartCardCryptographicRedirection=On
<!--NeedCopy-->
クライアントで高速スマートカードログオンを無効にする
クライアントで高速スマートカードログオンを無効にするには、関連するStoreFrontサイトのdefault.icaファイルからSmartCardCryptographicRedirectionパラメーターを削除します。
用途
スマートカードを使用してLinux VDAにログオンする
ユーザーはSSOシナリオと非SSOシナリオの両方で、スマートカードを使用してLinux VDAにログオンできます。
- SSOシナリオでは、ユーザーはキャッシュされたスマートカード証明書とPINを使用して、自動的にStoreFrontにログオンされます。ユーザーがStoreFrontでLinux仮想デスクトップセッションを開始すると、スマートカード認証のためにPINがLinux VDAに渡されます。
-
非SSOシナリオでは、ユーザーはStoreFrontにログオンするために、証明書を選択してPINを入力するよう求められます。
ユーザーがStoreFrontでLinux仮想デスクトップセッションを開始すると、Linux VDAへのログオンのダイアログボックスが次のように表示されます。ユーザー名はスマートカードの証明書から抽出され、ユーザーはログオン認証のためにPINをもう一度入力する必要があります。
この動作はWindows VDAと同じです。
スマートカードを使用してセッションに再接続する
セッションに再接続するには、スマートカードがクライアントデバイスに接続されていることを確認します。スマートカードが接続されていないと再認証は失敗するため、Linux VDA側にグレーのキャッシュウィンドウが表示されてすぐに終了します。この場合、スマートカードの接続を促すメッセージは表示されません。
ただし、StoreFront側では、セッションに再接続しようとしたときにスマートカードが接続されていないと、StoreFront Webにより次のような通知が表示されることがあります。
制限事項
スマートカード取り出し時の動作ポリシー
現在、Linux VDAはスマートカードの削除にデフォルトの動作のみを使用しています。Linux VDAに正常にログオンした後でスマートカードを取り外しても、セッションは接続されたままになり、セッション画面はロックされません。
他のスマートカードおよびPKCS#11ライブラリのサポート
サポート一覧にOpenSCスマートカードのみが表示されますが、Citrixでは汎用スマートカードリダイレクトによる方法が提供されているため、他のスマートカードおよびPKCS#11ライブラリの使用を試すこともできます。特定のスマートカードまたはPKCS#11ライブラリに切り替えるには:
-
PKCS#11ライブラリのすべての
opensc-pkcs11.so
インスタンスを置き換えます。 -
PKCS#11ライブラリからレジストリへのパスを設定するには、次のコマンドを実行します:
/opt/Citrix/VDA/bin/ctxreg update -k "HKLM\System\CurrentControlSet\Control\Citrix\VirtualChannels\Scard" -v "PKCS11LibPath" -d "PATH" <!--NeedCopy-->
PATHはPKCS#11ライブラリ(/usr/lib64/pkcs11/opensc-pkcs11.soなど)を参照します。
-
クライアントで高速スマートカードログオンを無効にします。