スマートカードを使用したパススルー認証

ユーザーは、Linux仮想デスクトップセッションにログオンするときに、クライアントデバイスに接続されたスマートカードを認証に使うことができます。この機能は、ICAスマートカード仮想チャネル上でのスマートカードのリダイレクトによって実装されます。ユーザーはセッション内でスマートカードを使用することもできます。使用例としては、ドキュメントにデジタル署名を追加する、電子メールを暗号化または復号化する、スマートカード認証が必要なWebサイトを認証するなどがあります。

Linux VDAは、この機能にWindows VDAと同じ構成を使用します。詳しくは、以下の「スマートカードの環境を構成する」セクションを参照してください。

スマートカードを使用したパススルー認証を行えるかどうかは、次の要因により決定されます。

  • Linux VDAがRHEL 7.5にインストールされている。
  • CoolKeyがサポートするスマートカードが使用されている。
  • Windows向けCitrix Workspaceアプリが使用されている。

注:

Citrix Gatewayに対するスマートカード認証は公式にはサポートされていません。

CoolKeyがスマートカードをサポートしていることの確認

CoolKeyは、RHEL上で広く使用されているスマートカードドライバーです。CoolKeyは、CoolKeyカード、CAC、PIV、PKCS#15という4種類のスマートカードをサポートしています。しかし、公式にサポートされ検証されているカードの数はまだ限られています(「Smart Card Support in Red Hat Enterprise Linux」を参照してください)。

この記事では、構成を説明するための例として、Yubikey 4スマートカードを使用します。Yubikey 4は、Amazonや他の小売業者から簡単に購入できる一体型のUSB CCID PIVデバイスです。CoolKeyドライバーは、Yubikey 4をサポートしています。

yubikey4の画像

もっと高度なスマートカードが必要になった場合は、RHEL 7.5とCoolKeyパッケージがインストールされた物理マシンを準備します。CoolKeyのインストールについては、「スマートカードドライバーをインストールする」を参照してください。スマートカードを挿入し、次のコマンドを実行して、CoolKeyがスマートカードをサポートしていることを確認します:

pkcs11-tool --module libcoolkeypk11.so --list-slots

CoolKeyがスマートカードをサポートしている場合、コマンド出力は次のようになり、スロット情報が含まれています。

coolkeyがスマートカードをサポートしている場合の出力の画像

構成

スマートカード環境を構成する

Linux VDAは、Windows VDAと同じスマートカード環境を使用します。この環境では、ドメインコントローラー、Microsoft証明機関(CA)、インターネットインフォメーションサービス、Citrix StoreFront、Citrix Workspaceアプリなど、複数のコンポーネントを構成する必要があります。Yubikey 4スマートカードに基づく構成について詳しくは、シトリックスの記事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

スマートカードドライバーをインストールする

CoolKeyは、RHEL上で広く使用されているスマートカードドライバーです。CoolKeyがインストールされていない場合は、次のコマンドを実行してインストールします。

yum install coolkey

スマートカード認証用のPAMモジュールをインストールする

次のコマンドを実行して、pam_krb5およびkrb5-pkinitモジュールをインストールします。

yum install pam_krb5 krb5-pkinit

pam_krb5モジュールもプラグイン可能な認証モジュールであり、PAM対応アプリケーションがパスワードを確認したり、キー配布センター(KDC)のチケット配布チケットを取得したりするために、このモジュールを使用できます。krb5-pkinitモジュールにはPKINITプラグインが含まれていて、クライアントが秘密キーと証明書を使用してKDCから初期資格情報を取得できるようにします。

RHEL 7.5にLinux VDAソフトウェアをインストールする

RPMパッケージマネージャーまたは簡単インストールを使用してLinux VDAソフトウェアをインストールします。「インストールの概要」セクションを参照してください。

VDAのインストールが完了したら、VDAがDelivery Controllerに登録でき、公開されているLinuxデスクトップセッションがパスワード認証を使用して正常に起動できることを確認します。

ルート証明書を準備する

ルート証明書は、スマートカード内の証明書を検証するために使用されます。ルート証明書をダウンロードしてインストールするには、次の手順を実行します。

  1. 通常はCAサーバーから、ルート証明書をPEM形式で取得します。

    次のようなコマンドを実行して、DERファイル(*.crt、*.cer、*.der)をPEMに変換できます。次のコマンド例では、certnew.cer はDERファイルです。

    openssl x509 -inform der -in certnew.cer -out certnew.pem
    
  2. ルート証明書をopensslディレクトリにインストールします。例として certnew.pem ファイルを使用しています。

    cp certnew.pem /etc/pki/CA/certs/

NSSデータベースを構成する

Linux VDAログオンモジュールは、スマートカードと証明書にアクセスするときにNSSデータベースに依存しています。次の手順を実行して、NSSデータベースを構成します。

  1. 前述のルート証明書をNSSデータベースに追加します。

    certutil -A -n "My Corp Root" -t "CT,C,C" -a -d /etc/pki/nssdb -i  /etc/pki/CA/certs/certnew.pem
    
  2. 次のコマンドを実行して、ルート証明書がNSSデータベースに正常に追加されたことを確認します。

    certutil -L -d /etc/pki/nssdb
    

    ルート証明書が正常に追加されている場合、コマンド出力は次のようになります。

    ルート証明書が正常に追加されている場合のコマンド出力の画像

  3. CoolKeyがNSS PKCS#11ライブラリにインストールされているかどうかを確認します。

    modutil -list -dbdir /etc/pki/nssdb
    

    CoolKeyモジュールがインストールされている場合、コマンド出力は次のようになります。

    coolkeyモジュールがインストールされている場合のコマンド出力の画像

    CoolKeyモジュールがインストールされていない場合は、次のコマンドを実行して手動でインストールし、再度インストールを確認してください。

    modutil -add "CoolKey PKCS #11 Module" -libfile libcoolkeypk11.so -dbdir /etc/pki/nssdb
    

pam_krb5モジュールを構成する

pam_krb5モジュールはKDCと対話して、スマートカード内の証明書を使用してKerberosチケットを取得します。PAMでpam_krb5認証を有効にするには、次のコマンドを実行します:

authconfig --enablekrb5 --update

/etc/krb5.conf 構成ファイルに、実際の領域に応じたpkinit情報を追加します。

EXAMPLE.COM = {

    kdc = KDC. EXAMPLE.COM

    auth_to_local = RULE:[1:$1@$0]

    pkinit_anchors = FILE:/etc/pki/CA/certs/certnew.pem

    pkinit_kdc_hostname = KDC.EXAMPLE.COM

    pkinit_cert_match = ||<EKU>msScLogin,<KU>digitalSignature

    pkinit_eku_checking = kpServerAuth

 }

構成ファイルは、pkinit情報を追加した後、次のようになります。

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:/usr/lib64/pkcs11/libcoolkeypk11.so

SSSDを使用した場合、変更後の構成ファイルは次のようになります。

sssdを使用した場合の変更後の構成ファイルの画像

Winbindを使用した場合、変更後の構成ファイルは次のようになります。

winbindを使用した場合の変更後の構成ファイルの画像

Centrifyを使用した場合、変更後の構成ファイルは次のようになります。

centrifyを使用した場合の変更後の構成ファイルの画像

(オプション)スマートカードを使用したシングルサインオン

シングルサインオン(SSO)とは、仮想デスクトップやアプリケーションの起動時にパススルー認証を実装する機能を指します。この機能により、ユーザーがPINを入力する回数が減ります。Linux VDAでSSOを使用するには、Citrix Workspaceアプリを構成します。Windows VDAと同じ構成方法です。詳しくは、Knowledge CenterのCTX133982の記事を参照してください。

Citrix Workspaceアプリでグループポリシーを構成するときは、次のようにスマートカード認証を有効にします。

Workspaceアプリでスマートカード認証を有効にした場合の画像

用途

スマートカードを使用してLinux VDAにログオンする

ユーザーはSSOシナリオと非SSOシナリオの両方で、スマートカードを使用してLinux VDAにログオンできます。

  • SSOシナリオでは、ユーザーはキャッシュされたスマートカード証明書とPINを使用して、自動的にStoreFrontにログオンされます。ユーザーがStoreFrontでLinux仮想デスクトップセッションを開始すると、スマートカード認証のためにPINがLinux VDAに渡されます。
  • 非SSOシナリオでは、ユーザーはStoreFrontにログオンするために、証明書を選択してPINを入力するよう求められます。

    PINを入力してStoreFrontにログオンする画像

ユーザーがStoreFrontでLinux仮想デスクトップセッションを開始すると、Linux VDAへのログオンのダイアログボックスが次のように表示されます。ユーザー名はスマートカードの証明書から抽出され、ユーザーはログオン認証のためにPINをもう一度入力する必要があります。

この動作はWindows VDAと同じです。

XenDesktopログインの画像

スマートカードを使用してセッションに再接続する

セッションに再接続するには、スマートカードがクライアントデバイスに接続されていることを確認します。スマートカードが接続されていないと再認証は失敗するため、Linux VDA側にグレーのキャッシュウィンドウが表示されてすぐに終了します。この場合、スマートカードの接続を促すメッセージは表示されません。

ただし、StoreFront側では、セッションに再接続しようとしたときにスマートカードが接続されていないと、StoreFront Webにより次のような通知が表示されることがあります。

スマートカードの挿入を求める画像

制限事項

スマートカード取り出し時の動作ポリシー

現在、Linux VDAはスマートカードの削除にデフォルトの動作のみを使用しています。Linux VDAに正常にログオンした後でスマートカードを取り外しても、セッションは接続されたままになり、セッション画面はロックされません。

他のスマートカードおよびPKCS#11ライブラリのサポート

サポート一覧にCoolKeyスマートカードのみが表示されますが、シトリックスは汎用スマートカードリダイレクトによる方法を提供しているため、他のスマートカードおよびPKCS#11ライブラリの使用を試すこともできます。特定のスマートカードまたはPKCS#11ライブラリに切り替えるには:

  1. PKCS#11ライブラリのすべてのlibcoolkeypk11.soインスタンスを置き換えます。

  2. PKCS#11ライブラリからレジストリへのパスを設定するには、次のコマンドを実行します:

    /opt/Citrix/VDA/bin/ctxreg update -k "HKLM\System\CurrentControlSet\Control\Citrix\VirtualChannels\Scard" -v "PKCS11LibPath" -d "PATH"
    

    PATHはPKCS#11ライブラリ(/usr/lib64/pkcs11/libcoolkeypk11.soなど)を参照します。

Version

スマートカードを使用したパススルー認証