【FreeRADIUS講座 付録】パスワードはもう要らない!最強の「EAP-TLS認証(クライアント証明書)」構築完全マニュアル

「IDとパスワード」の時代を終わらせよう。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
全8回の講座、本当にお疲れ様でした。すでにあなたの手元には、強固な認証基盤が完成しているはずです。

しかし、セキュリティの世界には「上には上が」存在します。
IDとパスワードによる認証(EAP-PEAP)は便利ですが、「パスワードの使い回し」や「私物端末への勝手な設定」を技術的に100%防ぐことは困難です。

コウ君

先生、実はそうなんです。
IDとパスワードを教えてしまうと、社員が勝手に自分の私物スマホにも設定しちゃうんですよね…。
「会社支給のPC以外は繋がせたくない!」っていうのが本音なんですけど、パスワード認証じゃ無理ですよね?

リナックス先生

その通り。パスワードは「知っていれば誰でも使える」からね。
そこで登場するのが、今回のテーマ「EAP-TLS認証」よ。
これは「電子証明書ファイル」を持っている端末しか接続できない方式。
パスワードは一切不要。証明書をインストールした会社支給PC以外は、物理的にシャットアウトできるわ。
これこそが、認証の最終形態よ!

今回は「番外編」として、構築難易度は高いものの、最高強度のセキュリティを誇る「クライアント証明書認証(EAP-TLS)」の構築手順を完全解説します。
証明書の発行から配布、そして紛失時の失効管理まで、プロの運用術を身につけましょう。


第1章:EAP-TLSの仕組みとメリット

まずは、これまでの「EAP-PEAP」と今回の「EAP-TLS」の違いを理解しましょう。

EAP-PEAP(ID/PASS認証)

  • サーバー証明書: 必要(サーバーが本物か確認するため)。
  • クライアント証明書: 不要
  • 認証情報: ユーザーIDとパスワード。
  • 弱点: パスワードが漏れると、どの端末からでも接続できてしまう。

EAP-TLS(電子証明書認証)

  • サーバー証明書: 必要。
  • クライアント証明書: 必要
  • 認証情報: 電子証明書ファイルそのもの(パスワード不要)。
  • 強み: 証明書ファイルを持っていない端末は、門前払いされる。
    「会社支給PCにだけ証明書を入れる」という運用をすれば、私物スマホの接続を完全に排除できる。

EAP-TLSは「双方向認証(Mutual Authentication)」を行います。
クライアントがサーバーを検証するだけでなく、サーバーもクライアントの証明書を検証するのです。


第2章:クライアント証明書の作成手順

それでは、端末に配布するための「クライアント証明書」を作成しましょう。
第5回で使用した /etc/raddb/certs/ ディレクトリには、便利な Makefile が用意されており、これを使うのが最も確実です。

1. ユーザー定義ファイルの作成

まず、「誰のための証明書か」を定義するファイルを作ります。
ここでは例として user01 という社員用の証明書を作ります。

cd /etc/raddb/certs/
sudo cp client.cnf user01.cnf

コピーした設定ファイルを編集します。

sudo nano user01.cnf

以下の部分を変更します。

[ req ]
...
input_password = whatever
output_password = whatever
...
[ client ]
...
emailAddress = user01@example.com
commonName = user01@example.com

CommonName (CN) は重要です。ログに残る「ユーザー名」として扱われます。

2. 証明書の発行(make client)

以下のコマンドを実行するだけで、秘密鍵の生成、署名要求(CSR)の作成、CAによる署名まで一気に行われます。

sudo make client email=user01@example.com

成功すると、以下のファイルが生成されます。

  • user01@example.com.pem : 公開鍵(証明書)
  • user01@example.com.key : 秘密鍵
  • user01@example.com.p12 : 配布用ファイル(PKCS#12形式)

WindowsやMac、スマホに取り込むのは、この .p12 ファイルです。
この中に「証明書」と「秘密鍵」と「CA証明書」がパッケージングされています。

3. パスワードについて

.p12 ファイルを開く(インポートする)ためのパスワードは、passwords.mk ファイル内の EXPORT_PASSWORD で定義されています。
デフォルトでは whatever になっていることが多いですが、セキュリティのため変更しておくことを推奨します。

grep EXPORT_PASSWORD passwords.mk

第3章:FreeRADIUSの設定変更

サーバー側で、クライアント証明書の検証を有効にする設定を行います。

eap.confの編集

/etc/raddb/mods-available/eap を編集します。

sudo nano /etc/raddb/mods-available/eap

tls-config tls-common セクションを確認します。

tls-config tls-common {
    ...
    # クライアント証明書の検証を有効にする
    verify {
        # クライアント証明書の発行元(CA)が自分自身であることをチェック
        tmpdir = /tmp/radiusd
        client = "/usr/bin/openssl verify -CAfile ${..ca_file}"
    }
    
    # 接続要求のCN(CommonName)をUser-Nameとして扱うか
    # check_cert_cn = %{User-Name}
    ...
}

基本的にはデフォルトのままで動作しますが、重要なのは「EAP-TLSが有効になっているか」です。
eap { ... } ブロック内の tls { ... } がコメントアウトされていないことを確認してください。

再起動と確認

sudo systemctl restart radiusd
# 念のためデバッグモードで待機
sudo systemctl stop radiusd
sudo radiusd -X

第4章:Windowsクライアントへの導入手順

作成した user01@example.com.p12 ファイルを、利用者のPCに配布してインストールします。

1. 証明書のインポート

  1. .p12 ファイルをダブルクリックします。
  2. 「証明書のインポートウィザード」が開きます。
  3. 保存場所:「現在のユーザー」を選択。
  4. パスワード:passwords.mk で設定したパスワード(初期値: whatever)を入力。
  5. 証明書ストア:「自動的に選択する」でOK。
  6. 完了すると、個人の証明書ストアにインストールされます。

2. Wi-Fi設定(プロファイル作成)

EAP-PEAPの時と同様に、手動でプロファイルを作成します。

  1. 「ワイヤレスネットワークに手動で接続します」を選択。
  2. セキュリティの種類:「WPA2-エンタープライズ」
  3. 「接続の設定を変更します」→「セキュリティ」タブ。
  4. ネットワークの認証方法:「Microsoft: スマートカードまたはその他の証明書」を選択(これがEAP-TLSです)。
  5. 「設定」ボタンをクリック。
  6. 「証明書を検証してサーバーのIDを検証する」にチェック。
  7. 信頼されたルート証明機関:自社のCA(My Proxy CAなど)にチェック。
  8. 「認証にこの証明書を使う」で「ローカルコンピューターの証明書を使用する」等のチェックを確認。

3. 接続

Wi-Fiに接続すると、証明書の選択画面が出ることがあります。
先ほどインストールした証明書を選んでOKを押せば、パスワード入力なしでスッと繋がります。


第5章:iPhone / Androidへの導入手順

スマホの場合はもっとシンプルですが、ファイルの渡し方に工夫が必要です。

iPhone (iOS) の場合

  1. .p12 ファイルをAirDropやiCloud Drive、またはメールでiPhoneに送ります。
  2. ファイルをタップすると「プロファイルがダウンロードされました」と表示されます。
  3. 「設定」→「プロファイルがダウンロードされました」を開き、インストールします(パスコード入力が必要)。
  4. Wi-Fi設定から対象のSSIDをタップ。
  5. モードで「EAP-TLS」を選択。
  6. ID(ユーザ名)に user01@example.com を入力。
  7. 「ID」または「証明書」欄で、インストールした証明書を選択。
  8. 接続!

Androidの場合

  1. .p12 ファイルをGoogleドライブ経由などで端末に保存します。
  2. 「設定」→「セキュリティ」→「暗号化と認証情報」→「証明書のインストール」→「Wi-Fi証明書」。
  3. 保存したファイルを選択し、パスワードを入力してインストール。
  4. Wi-Fi設定から対象のSSIDをタップ。
  5. EAP方式:TLS を選択。
  6. CA証明書:インストールしたCA(または検証しない)。
  7. ユーザー証明書:先ほどインストールしたものを選択。
  8. 接続!

第6章:端末紛失時の対応「証明書失効リスト (CRL)」

社員がPCやスマホを落としてしまいました。
その端末には証明書が入っています。このままでは拾った人が社内ネットワークに侵入できてしまいます。
直ちにその証明書を無効化(Revoke)しなければなりません。

1. 証明書の失効処理

サーバー上で以下のコマンドを実行します。

cd /etc/raddb/certs/
# 証明書の内容を確認してシリアル番号などを調べる(任意)
openssl x509 -in user01@example.com.pem -noout -text

# index.txt(データベース)を更新して失効させる
# 付属のMakefileにはrevokeターゲットがない場合が多いため、opensslコマンドを直接使います
sudo openssl ca -config ca.cnf -revoke user01@example.com.pem

Data Base Updated と表示されれば失効完了です。
index.txt を見ると、該当行の先頭が V (Valid) から R (Revoked) に変わっているはずです。

2. CRL(失効リスト)の再生成

「この証明書は無効ですよ」というブラックリスト(CRLファイル)を更新します。

sudo openssl ca -config ca.cnf -gencrl -out crl.pem

3. FreeRADIUSへの反映

FreeRADIUSは起動時にCRLを読み込みますが、稼働中に更新した場合はリロードが必要です。

sudo systemctl reload radiusd

また、eap.conf でCRLのチェックが有効になっているか確認してください。

check_crl = yes
ca_path = ${certdir}

これで、失効した証明書を持った端末からの接続は、サーバー側で拒否されるようになります。


第7章:証明書発行の自動化スクリプト

社員が増えるたびに手動でコマンドを打つのは大変です。
ユーザー名を引数にするだけで、作成からzip圧縮まで行うスクリプトを作っておきましょう。

作成用スクリプト(create_cert.sh)

#!/bin/bash

if [ -z "$1" ]; then
    echo "Usage: $0 [username]"
    exit 1
fi

USER=$1
EMAIL="${USER}@example.com"
CERT_DIR="/etc/raddb/certs"
EXPORT_DIR="/home/admin/export_certs"

cd $CERT_DIR

# 設定ファイルのコピー
cp client.cnf ${USER}.cnf

# 証明書の作成
make client email=${EMAIL}

# 配布用ディレクトリへコピー
mkdir -p $EXPORT_DIR
cp ${EMAIL}.p12 $EXPORT_DIR/

# 権限変更(取り出しやすくする)
chmod 644 $EXPORT_DIR/${EMAIL}.p12

echo "Certificate created: $EXPORT_DIR/${EMAIL}.p12"

これを使えば、./create_cert.sh tanaka と打つだけで、田中の証明書が出来上がります。


まとめ:EAP-TLSこそが認証の到達点

今回は番外編として、最高難易度かつ最高強度のEAP-TLS認証を構築しました。

今回の重要ポイント:

  • EAP-TLSはパスワード不要、証明書ファイルで認証する。
  • make client で簡単にクライアント証明書(.p12)が作れる。
  • 紛失時は openssl ca -revoke で失効させ、CRLを更新する。
  • 私物端末を排除したいならEAP-TLS一択。

導入のハードルは高いですが、一度構築してしまえば「パスワード忘れの問い合わせ」から解放され、セキュリティも万全になります。
機密情報を扱う部署や、役員用の特別ネットワークなど、部分的に導入するのも効果的です。

これで、FreeRADIUS講座の全コンテンツが完結しました。
あなたが構築した認証基盤が、組織のセキュリティを長く支え続けることを願っています。
それでは、また新しい技術講座でお会いしましょう!

▼ エンジニアとしてのキャリアを加速させる ▼

証明書認証を極める
「VPS」で自分専用環境

おすすめVPSを見る

高度なスキルを武器に
「ITエンジニア転職」

転職エージェントを見る

コメント