RHEL 7.4 以降におけるスマートカードサポート

更新 -

Red Hat は、一般的に使用されているさまざまなスマートカードを Red Hat Enterprise Linux でサポートする努力をしていますが、すべてのカードをサポートすることはできません。このページでは、サポート対象となるカードを定めています。さらに、カードと RHEL との間に存在する潜在的な非互換性を調査する方法を説明します。

スマートカードは、通常、複数レイヤーで、複数のコンポーネントによって処理されます。したがって、まずは背景について簡単に説明します。

オペレーティングシステムは、下位レベルでのスマートカード (リーダー) とのやりとりに PC/SC プロトコルを使用し、pcsc-lite デーモンが行います。デーモンは、通常通り USB で、受け取ったコマンドをカードに転送します。

PC/SC におけるローレベルのやりとりは、アプリケーションレベルではほとんど見られません。RHEL で、アプリケーションがスマートカードにアクセスする主な方法は、上位レベルの API である OASIS PKCS#11 API を使用することです。この API は、カードとのやりとりを、暗号オブジェクト (秘密鍵など) で利用できる特定のコマンドにまとめます。スマートカードベンダーは、PKCS#11 API に準拠し、カードのドライバーとして使用できる共有モジュールを提供している場合がしばしばあります。この共有モジュールは、アプリケーションからインポートして、カードと直接やりとりするのに使用することができます。オープンソースでは、OpenSC など、複数のスマートカードドライバーを 1 つの共有モジュールにまとめるプロジェクトがあります。たとえば、RHEL 7.4 に同梱される OpenSC モジュールは、1 つのモジュールにまとめられた Yubikey、Nitrokey、US-government PIV、CAC カードにサポートを提供します。スマートカードベンダーには、OpenSC ライブラリを使用してカードのサポートを提供することが強く推奨されます。

サポート対象のカード

Red Hat Enterprise Linux 7.4 では、以下のカードがサポートされます。

  • Red Hat Certificate System (RHCS) が対象とする全カード (CAC、PIV、および CoolKey アプレットがあるカード)
  • 選択された PKCS#15 カード。このファミリのカードはサポートされますが、カード間で設定とオプションの多くが異なります。したがって、RHEL と互換性がない可能性があるカードについては、カスタマーサービスまでお問合せください。
  • その他のカードは、Red Hat の判断によりサポートされる可能性があります。

利用可能な PKCS#11 ドライバー

RHEL 7.3 スマートカードは、CoolKey PKCS#11 モジュールを使用しています。 RHEL 7.4 以降で OpenSC PKCS#11 モジュールが追加されました。このモジュールは、CoolKey モジュールと完全に互換性がある選択肢となります。RHEL 7.4 では、アプリケーションで OpenSC モジュールを使用すると、PKCS#15 ファミリのカードに対する改善されたサポートだけでなく、OpenSC に関する追加機能およびドライバーを利用することができます。OpenSC のアップストリームでサポートされる一部のカードは、上述のサポート一覧には含まれませんが、Red Hat では妥当な範囲でサポートを提供します。RHEL 7.4 以降での新しいハードウェアの使用可能性は、OpenSC から提供されます。

CoolKey から OpenSC への移行

GNOME にログインする

Gnome は pam_pkcs11 ツールを使用して、Smart Cards および NSS へのアクセスを提供します。OpenSC を使用するには、/etc/pam_pkcs11/pam_pkcs11.conf に OpenSC を追加する必要があります。適切なNSS DB も必要です。

use_pkcs11_module = opensc;
pkcs11_module opensc {
    [...]
nss_dir = /etc/pki/nssdb;

NSS DB は、CoolKey ではなく、OpenSC で設定する必要があります。たとえば、提供されているスクリプトを使用すれば設定できます。

# pkcs11-switch opensc

元に戻る場合は、pkcs11-switch coolkey を実行します。

SSH ログイン

OpenSSH は、ライブラリの PKCS#11 インターフェイスを直接使用しています。CoolKey の代わりに OpenSC を使用するには、クライアントの設定ファイルまたはシステムで使用しているスクリプトで、CoolKey のパス (/usr/lib64/pkcs11/libcoolkey.so) を、OpenSC のパス (/usr/lib64/pkcs11/opensc-pkcs11.so) に置き換えます。

p11-kit で、CoolKey とともに OpenSC を使用する

CoolKey ドライバーは p11-kit データベースに自動的に登録され、大概のスマートカードでデフォルトのドライバーになります。ここで同時に OpenSC を登録しないでください。登録すると、p11-kit-proxy にサポートされる各カードが 2 回表示されるようになります。p11-kit-proxy から OpenSC を使用する前に、CoolKey はアンインストールされている (または /usr/share/p11-kit/modules/coolkey.module ファイルが削除されている) ことを確認します。

p11-kit で OpenSC のサポートを提供するファイルは、/usr/share/p11-kit/modules/opensc.module に自動的にインストールされます。

Q&A

OpenSC で PIV カードを使用していますが、すべての署名に対して PIN を入力するように求められます。CoolKey では求められません。

PIV デジタル署名のキーオペレーションではすべて、信頼性のあるセキュリティレベルを保証するために、NIST ドキュメントに記載されている「明示的なユーザーアクション」が必要になります。これは、/etc/opensc-*.confpin_cache_ignore_user_consent を設定し、OpenSC のオペレーションで PIN キャッシュを有効にすれば回避できます。

カードを 1 種類しか使用していないにも関わらず、検出に時間がかかります。

OpenSC は、大抵のカードをサポートしていますが、カードを 1 つまたは 2 つしか使用しない場合は、ランタイム時に /etc/opensc-x86_64.conf (x86_64 アーキテクチャーの場合) に設定することができます。このセクションで、app defaultcard_drivers オプションを探し、それを適切なドライバーに設定します。サポートされるドライバーの一覧を表示するには、opensc-tool --list-drivers を実行します。たとえば、PIV ドライバーと CAC ドライバーだけを許可する場合は、次の設定を使用します。

card_drivers = cac, PIV-II;