テクノロジーガイド

IPFire にスマートカード(PC/SC・CCID・OpenSC)を統合する方法

4 min read ネットワーク 更新されました 19 Oct 2025
IPFire にスマートカード(PC/SC・CCID・OpenSC)を統合
IPFire にスマートカード(PC/SC・CCID・OpenSC)を統合

重要: 本ガイドは IPFire の開発(LFS)シェル上での作業を前提としています。実稼働システムに適用する前にテスト環境で検証してください。

概要と目的

この連載記事の続編です。ここではハードウェアトークン(スマートカード)とそのリーダー(CCID 準拠)を IPFire に統合するため、以下のオープンソースツールを IPFire 2.19 向けにコンパイルし、pakfire 形式のアドオンとして配布・インストールする手順を示します。

  • pcsc-lite(PC/SC Smart Card Daemon)
  • CCID(スマートカードリーダー向けドライバ)
  • OpenSC(スマートカード管理/PKCS#11 サポート)

用語定義(一行ずつ簡潔に)

  • PC/SC: スマートカードアクセス用の標準 API。
  • CCID: USB スマートカードリーダー向けプロトコル/ドライバ群。
  • OpenSC: PKCS#11 や PKCS#15 を実装するオープンソースツールセット。

ユースケース例

  • 安全な Web ログイン
  • ワークステーションログオン
  • ファイル暗号化
  • VPN(OpenVPN、L2TP)でのクライアント認証
  • メール暗号化

サポートされるカードベンダー(一部)

  • ASEPCOS
  • FTCOSPK01C
  • OpenPGP Card
  • Cyberflex
  • CardOs
  • STARCOS

重要: ベンダーごとのサポート状況やカードのフォーマット(PKCS#15 互換など)は実機で確認してください。


目次

  • 環境準備
  • 開発シェル(test shell)での前提操作
  • pcsc-lite のビルドとインストール
  • CCID ドライバのビルドと udev ルール
  • OpenSC のビルドとインストール
  • IPFire 用アドオン(pakfire)としてのパッケージ化
  • 実機への配布とインストール
  • トラブルシューティングとチェックリスト
  • 受け入れ基準
  • まとめ

環境準備

開発環境の詳細は前回の記事にありますが、要点は次の通りです。

  • IPFire のソースツリーと LFS ビルド環境を用意する
  • 作業は root または同等の権限で行う
  • 必要なビルドツール(gcc, make, pkg-config 等)を導入しておく

IPFire のテストシェルに入る

IPFire の LFS(build)環境に入り、そこでパッケージの依存関係検証やビルドを行います。ルートディレクトリで次を実行します。

./make shell

IPFireシェルを起動したターミナル画面

ソースパッケージは /usr/src/cache に配置されています。チュートリアルで必要なパッケージはあらかじめ cache に置かれています。

IPFireのソースキャッシュディレクトリを表示

pcsc-lite のソースパッケージが確認できます。

pcsc-lite のソースパッケージ一覧


pcsc-lite のビルド

  1. 事前に必要な開発ライブラリをインストールします。少なくとも libudev-dev が必要です(IPFire の LFS 環境では apt-get を利用した例を記載)。
apt-get install libudev-dev

libudev-dev をインストールするapt出力

  1. ソースを展開して configure を実行します。
tar -xf pcsc-lite-1.8.18.tar.bz2
cd pcsc-lite-1.8.18
./configure

pcsc-lite を展開して ./configure を実行した様子

configure がエラーなく通る例。

configure コマンドがエラーなく終了した出力

  1. make と make install を実行して pcscd をインストールします。
make
make install

pcscd デーモンを make && make install でインストール

インストール成功時に表示される重要なファイルパス(ヘッダやライブラリのインストール先)を控えておきます。これらは CCID の configure 時に参照します。

pcsc-lite のインストールで示される重要パス

pcscd が稼働していることを確認します(テストシェル内)。

テスト環境で pcscd が起動しているプロセス一覧


CCID ドライバのビルド

CCID は USB スマートカードリーダーの汎用ドライバ群です。pcsc-lite を先にインストールしておく必要があります。

  1. cache に配置された ccid パッケージを展開します(例: ccid-1.4.24)。

  2. ./configure を実行すると pcsc-lite を検出できずにエラーとなることがあります。

CCID の ./configure が PCSC 未検出でエラーを出している様子

この場合、pcsc-lite を /usr/local にインストールしたようなケースだとインクルードパスや pkg-config のパスが異なるため、明示的に指定します。

./configure PCSC_CFLAGS=-I/usr/local/include/PCSC

さらに、libpcsclite.pc(pkg-config 用の .pc)が見つからない問題が出る場合は、PKG_CONFIG_PATH をエクスポートします。

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
./configure PCSC_CFLAGS=-I/usr/local/include/PCSC

PKG_CONFIG_PATH をエクスポートするシェルプロンプト

再実行で PCSC 関連ヘッダ・ライブラリが検出されれば configure は成功します。

configure スクリプトを再実行した出力の一部

configure が PCSC を検出して成功した出力

  1. make && make install で CCID ドライバをインストールします。
make
make install

CCID の make && make install を実行している様子

  1. スマートカードリーダーの udev ルールを配置します。多くの CCID パッケージは udev ルールファイル(例: 92_pcscd_ccid.rules)を同梱しています。これを /etc/udev/rules にコピーしてください。
cp 92_pcscd_ccid.rules /etc/udev/rules/

スマートカードリーダー用の udev ルールを /etc/udev/rules にコピー

コピー後、udev を再読み込みまたはシステム再起動して正しく権限・デバイスノードが作成されることを確認します。


OpenSC のビルド(スマートカード管理)

OpenSC は PKCS#11 およびカードファイル構造(PKCS#15)を扱うツール群です。OpenVPN や OpenSSL と連携する際に PKCS#11 を使う場合に重要です。

  1. ソースを展開し、configure を実行して依存関係を確認します。
cd opensc-0.16.0
./configure

OpenSC の configure を実行して依存関係をチェックする様子

configure の出力例。

OpenSC configure の出力例(依存チェック1)

OpenSC configure の出力例(依存チェック2)

  1. make && make install を実行します。
make
make install

OpenSC を make && make install でインストールしている様子

インストール完了の例。

テストシェルに OpenSC が正しくインストールされている出力


IPFire アドオン(pakfire)用のパッケージ化

ここからは、ビルド済みの成果物を IPFire の pakfire アドオンとしてパッケージ化し、他の IPFire システムに配布/インストールできる形式にします。

基本手順のポイント:

  • 各パッケージごとに lfs スクリプト(LFS ビルドスクリプト)を作成する
  • make.sh(ビルド管理スクリプト)に新しいアドオンを追加する
  • ビルド後に生成される rootfiles を config/rootfiles/packages に配置する
  • rootfiles 中の余分な記号(例: +)を削除する
  • src/paks// に install.sh, uninstall.sh, update.sh を配置する

LFS スクリプトをダウンロードして ipfire-2.x の lfs ディレクトリに配置します。

LFS スクリプトをダウンロードして lfs ディレクトリに配置する様子

各パッケージの lfs スクリプト例(画面はそれぞれのファイル内容):

pcsc-lite 用の LFS スクリプトの内容

ccid 用の LFS スクリプトの内容

OpenSC 用の LFS スクリプトの内容

make.sh に新しいアドオンのビルドルールを追加します(差分表示の例)。

make.sh に新しいアドオンを追加した差分表示

ビルドコマンド(各パッケージに対して):

ipfiremake pcsc-lite
ipfiremake ccid
ipfiremake opensc

あるいは LFS スクリプトをまとめて走らせる場合:

./make.sh build

ビルドは 2 回実行する必要があるケースがあります(最初の実行で rootfiles が生成され、次にそれらを config に組み込んで再ビルドする)。

./make.sh build を実行したビルド出力

初回ビルドでは rootfiles が log ディレクトリに作成されるが、config にまだ配置されていないためビルド段階で “rootfiles not found” のメッセージが出ることがあります。

log ディレクトリに生成された rootfiles の一覧

これらを config/rootfiles/packages にコピーし、ファイル名を lfs スクリプト名に合わせて変更します。

cp log/pcsc-lite-1.8.18 config/rootfiles/packages/pcsc-lite
cp log/ccid-1.4.24 config/rootfiles/packages/ccid
cp log/opensc-0.16.0 config/rootfiles/packages/opensc

rootfiles を config/rootfiles/packages にコピーするコマンド出力

rootfiles 内に “+” 記号が入っている場合、pakfire の仕様上それを取り除く必要があります。sed で一括置換します。

sed -i 's/+//g' config/rootfiles/packages/pcsc-lite
sed -i 's/+//g' config/rootfiles/packages/ccid
sed -i 's/+//g' config/rootfiles/packages/opensc

例: pcsc-lite の rootfile(+ が含まれている状態)

pcsc-lite の rootfile(+ 記号あり)

ccid の rootfile(+ 記号あり)

opensc の rootfile(+ 記号あり)

sed 実行例の画面(+ を削除している様子)

実行後、+ が除去されていることを確認します。

rootfiles から + が削除された確認

pakfire 用のディレクトリ構成を整えます。src/paks/ を作成し、src/paks/default からインストール・アンインストール・アップデート用のスクリプトをコピーします。

src/paks/default から各パッケージへ install.sh 等をコピーする様子

再度ビルドを実行します。

./make.sh build

最終的に packages ディレクトリに .ipfire パッケージが生成されます。

ビルドが完了し packages ディレクトリに ipfire パッケージが作成されている


コンパイル済みパッケージの実稼働システムへの配布とインストール

生成された .ipfire パッケージを稼働中の IPFire システムへコピーします。ここでは /opt/pakfire/tmp に配置する例を示します。

生成したパッケージを稼働中の IPFire システム /opt/pakfire/tmp にコピー

コピーされたことを確認します。

パッケージファイルが IPFire システムにコピーされた一覧

パッケージを展開します(中身は install.sh 等が含まれます)。

tar -xvf pcsc-lite-1.8.18-2.ipfire
tar -xvf ccid-1.4.24-2.ipfire
tar -xvf opensc-0.16.0-2.ipfire

pcsc-lite-1.8.18-2.ipfire を tar で展開する様子

ccid-1.4.24-2.ipfire を tar で展開する様子

opensc-0.16.0-2.ipfire を tar で展開する様子

各パッケージの install.sh を実行してインストールします。

./install.sh

各パッケージの ./install.sh を実行している出力

pcsc-lite のインストール成功例。

pcsc-lite が稼働中のシステムにインストールされた確認

CCID ドライバのインストール例。

CCID スマートカードドライバがインストールされた出力

OpenSC のインストール完了画面。

OpenSC ツールが IPFire システムにインストールされた確認


トラブルシューティング(よくある問題と対処)

  1. configure が pcsc-lite を検出しない

    • 対処: PCSC_CFLAGS を明示的に指定し、PKG_CONFIG_PATH に /usr/local/lib/pkgconfig(またはインストール場所)を追加する。
    • 追加確認: libpcsclite.pc が存在するか、pkg-config –modversion libpcsclite で確認。
  2. rootfiles に + が含まれる

    • 対処: sed で + を削除してから再ビルド。
  3. udev ルールが反映されない

    • 対処: /etc/udev/rules/ 配置後に udevadm control –reload && udevadm trigger を実行する。デバイスが正しい権限で作成されているか確認。
  4. pcscd が起動しない/リーダーを認識しない

    • 対処: pcscd をデバッグモードで起動してログを確認(-f -d オプションなど)。USB デバイスが /dev/bus/usb に表示されるか lsusb で確認。
  5. PKCS#11 が期待どおり動作しない(OpenSC 経由)

    • 対処: pkcs11-tool や opensc-tool でカード情報が取得できるか検証。権限(カードへのアクセス)や PIN 周りを確認。

チェックリスト(導入前・導入後)

デベロッパー向け(ビルド準備)

  • IPFire の LFS シェルに入れることを確認
  • 必要なビルドツール(gcc, make, pkg-config)を確認
  • pcsc-lite, ccid, opensc のソースを /usr/src/cache に配置
  • make.sh と lfs スクリプトを更新済み

パッケージ作成者向け

  • rootfiles を config/rootfiles/packages に配置
  • rootfiles の余分な文字を削除
  • src/paks/ に install.sh, uninstall.sh, update.sh を用意
  • packages/.ipfire が生成されることを確認

システム管理者向け(実稼働適用前)

  • テスト環境でカードリーダーの動作確認を完了
  • udev ルールと権限を確認
  • pcscd と pkcs11 モジュールのログ確認
  • ロールバック手順を用意(パッケージの uninstall.sh)

受け入れ基準

  • pcscd が起動し、USB リーダーを検出する
  • pkcs11-tool でカードの情報が取得できる
  • パッケージは packages ディレクトリに .ipfire として生成される
  • install.sh を使って稼働環境に導入できる
  • uninstall.sh で問題なく削除できる

ミニ SOP(開発→パッケージ→配布の簡易手順)

  1. LFS シェルで各ソースをビルドしてインストール(pcsc-lite → ccid → opensc)
  2. 各 rootfile を log から config/rootfiles/packages にコピーし修正
  3. src/paks/ に install/uninstall/update スクリプトを準備
  4. ./make.sh build を実行して .ipfire を生成
  5. /opt/pakfire/tmp にコピーして稼働機で展開、./install.sh を実行

スキャンしやすいトラブル診断フローチャート(Mermaid)

flowchart TD
  A[configure に失敗] --> B{エラーメッセージ}
  B -->|libpcsclite not found| C[PKG_CONFIG_PATH を確認]
  B -->|header not found| D[PCSC_CFLAGS を指定]
  C --> E[export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig]
  D --> F[./configure PCSC_CFLAGS=-I/usr/local/include/PCSC]
  E --> G[再実行 ./configure]
  F --> G
  G --> H{成功?}
  H -->|はい| I[make && make install]
  H -->|いいえ| J[ログを確認して依存を追加]

テストケース(受け入れ試験)

  • ケース 1: pcscd を起動し、lsusb でリーダーが見える → pkcs11-tool でカードを読み取る
  • ケース 2: udev ルールを適用後、カード抜き差しで /dev/ に適切なノードが作成される
  • ケース 3: pakfire パッケージを使ってインストール/アンインストールを行い、状態が復元される

注意事項とベストプラクティス

  • 実稼働 IPFire に直接適用する前に、同一バージョンのテスト環境で十分に検証すること。
  • スマートカードの PIN や鍵管理は厳格に運用し、キーのバックアップ・失効手順を整備すること。
  • 標準の udev ルールで不足するベンダー固有のデバイスは、ベンダー提供の情報を参照して追加ルールを作成する。

まとめ

本稿では IPFire 2.19 の開発環境で pcsc-lite、CCID、OpenSC をビルドし、pakfire 形式で配布する一連の手順を詳述しました。重要なのは依存関係(特に pcsc のヘッダ/pkg-config 情報)を正しく参照させること、rootfiles の整備、udev ルールの配置と動作確認です。導入後は pkcs11 ツール群で動作検証し、カードの種類やベンダーごとの差分に注意してください。

重要: この手順は IPFire のビルドフローと内部構造に依存しています。IPFire の将来のバージョンや各ツールの新しいリリースでは手順が変わる可能性があります。

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Windowsの右クリックに「選択」メニューを追加する方法
Windows

Windowsの右クリックに「選択」メニューを追加する方法

Instagramで特定のメッセージに返信する方法
使い方

Instagramで特定のメッセージに返信する方法

Microsoft Storeの返金申請ガイド
サポート

Microsoft Storeの返金申請ガイド

VMware Workstation 17 Player の新機能とアップグレード手順
仮想化

VMware Workstation 17 Player の新機能とアップグレード手順

Windowsでエラー126を解決する方法
トラブルシューティング

Windowsでエラー126を解決する方法

Xiaomiサービスセンターのオンライン予約ガイド(インド)
サポート

Xiaomiサービスセンターのオンライン予約ガイド(インド)