「IDとパスワード」の時代を終わらせよう。
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
全8回の講座、本当にお疲れ様でした。すでにあなたの手元には、強固な認証基盤が完成しているはずです。
しかし、セキュリティの世界には「上には上が」存在します。
IDとパスワードによる認証(EAP-PEAP)は便利ですが、「パスワードの使い回し」や「私物端末への勝手な設定」を技術的に100%防ぐことは困難です。
先生、実はそうなんです。
IDとパスワードを教えてしまうと、社員が勝手に自分の私物スマホにも設定しちゃうんですよね…。
「会社支給のPC以外は繋がせたくない!」っていうのが本音なんですけど、パスワード認証じゃ無理ですよね?
その通り。パスワードは「知っていれば誰でも使える」からね。
そこで登場するのが、今回のテーマ「EAP-TLS認証」よ。
これは「電子証明書ファイル」を持っている端末しか接続できない方式。
パスワードは一切不要。証明書をインストールした会社支給PC以外は、物理的にシャットアウトできるわ。
これこそが、認証の最終形態よ!
今回は「番外編」として、構築難易度は高いものの、最高強度のセキュリティを誇る「クライアント証明書認証(EAP-TLS)」の構築手順を完全解説します。
証明書の発行から配布、そして紛失時の失効管理まで、プロの運用術を身につけましょう。
🔐 FreeRADIUS完全攻略講座(バックナンバー)
※本記事は、第5回の「サーバー証明書作成」が完了していることを前提としています。
第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. 証明書のインポート
.p12ファイルをダブルクリックします。- 「証明書のインポートウィザード」が開きます。
- 保存場所:「現在のユーザー」を選択。
- パスワード:
passwords.mkで設定したパスワード(初期値: whatever)を入力。 - 証明書ストア:「自動的に選択する」でOK。
- 完了すると、個人の証明書ストアにインストールされます。
2. Wi-Fi設定(プロファイル作成)
EAP-PEAPの時と同様に、手動でプロファイルを作成します。
- 「ワイヤレスネットワークに手動で接続します」を選択。
- セキュリティの種類:「WPA2-エンタープライズ」。
- 「接続の設定を変更します」→「セキュリティ」タブ。
- ネットワークの認証方法:「Microsoft: スマートカードまたはその他の証明書」を選択(これがEAP-TLSです)。
- 「設定」ボタンをクリック。
- 「証明書を検証してサーバーのIDを検証する」にチェック。
- 信頼されたルート証明機関:自社のCA(My Proxy CAなど)にチェック。
- 「認証にこの証明書を使う」で「ローカルコンピューターの証明書を使用する」等のチェックを確認。
3. 接続
Wi-Fiに接続すると、証明書の選択画面が出ることがあります。
先ほどインストールした証明書を選んでOKを押せば、パスワード入力なしでスッと繋がります。
第5章:iPhone / Androidへの導入手順
スマホの場合はもっとシンプルですが、ファイルの渡し方に工夫が必要です。
iPhone (iOS) の場合
.p12ファイルをAirDropやiCloud Drive、またはメールでiPhoneに送ります。- ファイルをタップすると「プロファイルがダウンロードされました」と表示されます。
- 「設定」→「プロファイルがダウンロードされました」を開き、インストールします(パスコード入力が必要)。
- Wi-Fi設定から対象のSSIDをタップ。
- モードで「EAP-TLS」を選択。
- ID(ユーザ名)に
user01@example.comを入力。 - 「ID」または「証明書」欄で、インストールした証明書を選択。
- 接続!
Androidの場合
.p12ファイルをGoogleドライブ経由などで端末に保存します。- 「設定」→「セキュリティ」→「暗号化と認証情報」→「証明書のインストール」→「Wi-Fi証明書」。
- 保存したファイルを選択し、パスワードを入力してインストール。
- Wi-Fi設定から対象のSSIDをタップ。
- EAP方式:TLS を選択。
- CA証明書:インストールしたCA(または検証しない)。
- ユーザー証明書:先ほどインストールしたものを選択。
- 接続!
第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」で自分専用環境
高度なスキルを武器に
「ITエンジニア転職」

コメント