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

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

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

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

  • Linux VDAがRHEL 7.4にインストールされている。
  • SSSDがAD統合に使用されている。
  • CoolKeyがサポートするスマートカードが使用されている。
  • Citrix Receiver for Windowsが使用されている。

注:

NetScaler 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をサポートしています。

ローカライズされた画像

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

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

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

ローカライズされた画像

構成

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

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

yum install pam_pkcs11 pam_krb5 krb5-pkinit

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

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

RPMパッケージマネージャーまたは簡単インストールを使用してLinux VDAソフトウェアをインストールします。「インストールの概要」セクションを参照してください。Active Directory(AD)統合方法としてSSSDが選択されていることを確認します。

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データベースを構成する

pam_pkcs11モジュールは、スマートカードと証明書にアクセスするときに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モジュールがインストールされていない場合は、次のコマンドを実行して手動でインストールし、再度インストールを確認してください。

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

pam_pkcs11モジュールを構成する

pam_pkcs11モジュールは、ユーザー証明書を検証するときに(VDAの)ローカル構成に依存しています。pam_pkcs11で使用されるデフォルトのルート証明書は、/etc/pam_pkcs11/cacerts/ にあります。このパスの各ルート証明書にはハッシュリンクがあります。次のコマンドを実行して、準備されたルート証明書をインストールし、pam_pkcs11を構成します。

mkdir /etc/pam_pkcs11/cacerts/

cp certnew.pem /etc/pam_pkcs11/cacerts/

cacertdir_rehash /etc/pam_pkcs11/cacerts

pam_krb5モジュールを構成する

pam_krb5モジュールはKDCと対話して、スマートカード内の証明書を使用してKerberosチケットを取得します。

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

     EXAMPLE.COM = {

       kdc = KDC. EXAMPLE.COM

       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情報を追加した後、次のようになります。

ローカライズされた画像

PAM認証を構成する

PAM構成ファイルは、どのモジュールをPAM認証に使用しているかを示します。スマートカード認証の場合、/etc/pam.d/smartcard-auth ファイルに次の行を追加して、pam_pkcs11およびpam_krb5モジュールを追加します。

     auth        [success=ok ignore=2 default=die] pam_pkcs11.so nodebug wait_for_card

     auth        optional      pam_krb5.so use_first_pass no_subsequent_prompt preauth_options=X509_user_identity=PKCS11:/usr/lib64/pkcs11/libcoolkeypk11.so

     auth        sufficient    pam_permit.so

     account     [default=bad success=ok auth_err=ignore user_unknown=ignore ignore=ignore] pam_krb5.so

     session     optional      pam_krb5.so

変更後、構成ファイルは次のようになります。

ローカライズされた画像

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

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

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

ローカライズされた画像

用途

スマートカードを使用して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に正常にログオンした後でスマートカードを取り外しても、セッションは接続されたままになり、セッション画面はロックされません。

証明書テンプレートの制限事項

pam_pkcs11のマッピングモジュールの制限により、pam_pkcs11が証明書を正しいドメインユーザー名にマップするために使用する証明書テンプレートには制限事項があります。

たとえば、ユーザー名が「test」(SamAccountName)の場合、証明書マッピングは次の2つの場合にのみ機能します。

  • ユーザー「test」が、CNフィールドとして証明書のサブジェクトに表示されている。

    ローカライズされた画像

  • ユーザー「test」が、証明書のユーザープリンシパル名に表示されている。

    ローカライズされた画像

2番目のケースでは、次のコマンドを実行してユーザープリンシパル名(UPN)のマッピングに切り替えます:

/opt/Citrix/VDA/bin/ctxreg update -k "HKLM\System\CurrentControlSet\Control\Citrix\VirtualChannels\Scard" -v "CertMapMethod" -d "0x00000001"

また、次のように、pam_pkcs11構成ファイル(/etc/pam_pkcs11/pam_pkcs11.conf)を変更します:

ローカライズされた画像

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