FreeRadiusでEAP-PEAP認証 or EAP-TLS認証
- Radiusサーバー:ミニPC(Celeron J4125/8GB/128GB/2NICs:1NICでOK)
- 認証装置:Wi-Fiアクセスポイント:TP Link EAP650
- クライアント1:Windows10 & Intel AX210
- クライアント2:Android12(Xiaomi MUIU 13)
- クライアント3:iPhone iOS 16
- FreeRadius:3.0.26
- OpenSSL:3.0.2
- Ubuntu Server 22.04 LTS
- Rufus
- WindowsPC/Android/iPhoneで、FreeRadiusを利用して、
EAP-PEAP(ID/PWで認証)
EAP-TLS(証明書が入った端末のみ接続)
のどちらかで無線に接続できるようにする。
- https://ubuntu.com/download/server からISOイメージをダウンロード
- https://forest.watch.impress.co.jp/library/software/rufus/ からISOイメージをUSBメモリに書き込むツールをダウンロード、RufusでISOイメージを書き込む
- USBメモリから起動
- Language:English
- Installer update available:Continue without updating
- Keyboard configutation:Japanase
- Choose type of install:Ubuntu Server
- Network Connections:ネットワークケーブルを接続したインターフェース(NIC)が表示されていればOK
固定IPアドレス推奨、とりあえずDHCPで設定して後から固定化でもOK - Configure proxy:デフォルト
- Configure Ubuntu archive mirror:デフォルト
- Guided storage Configuration:Use an entire disk
- Storege Configuration:デフォルト
- Confirm destructive acion:Continue
- Profile setup:
Your Name:gonbei Your Servername:radius Pick a username:hogehoge
Choose a password:passowrd Confirm password:password - SSH setup:Install OpenSSH Server
- Featured Server Snaps:デフォルト
- Install Complete:Reboot
- A start job is running for Wait for Network to be Configuredで約3分待ち
- ログイン(14.Profile setupで設定した username/password)
- ルート権限
sudo -s
- タイムゾーン変更
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
- ネットワーク設定変更(例 固定IP:192.168.50.6/GW:192.168.50.1/DNS:192.168.0.1,8.8.8.8 を設定)
cd /etc/netplan/
vi 99-config.yaml
----------------
#
network:
ethernets:
enp1s0:
dhcp4: false
addresses:
- 192.168.50.6/24
routes:
- to: default
via: 192.168.50.1
nameservers:
addresses: [192.168.0.1,8.8.8.8]
enp2s0:
dhcp4: true
version: 2
renderer: networkd
----------------
sudo netplan apply
で設定反映
- 最新モジュールに更新
apt upgrade
- OS再起動
shutdown -r now
- Freeradius モジュールインストール
sudo -s
apt install freeradius
freeradius -v
radiusd: FreeRADIUS Version 3.0.xx, for host x86_64-pc-linux-gnu - ログ設定
cd /etc/freeradius/3.0/
cp radiusd.conf radiusd.conf.org
vi /etc/freeradius/3.0/radiusd.conf
——————–
認証時のログ出力設定
auth = yes
認証失敗時のログ出力
auth_badpass = yes
認証成功時のログ出力
auth_goodpass = yes
——————– - 認証装置(Wi-Fi アクセスポイント)
cd /etc/freeradius/3.0/
cp clients.conf clients.conf.org
vi clients.conf
———-
client For_EAP650 {
ipaddr = 192.168.50.0/24
secret = password
}
———- - ユーザー認証(EAP-PEAPはID/PWを使用、EAP-TLSはIDのみ使用)
cd /etc/freeradius/3.0/
cp users users.org
vi users
———-
testuser1 Cleartext-Password := “password1”
testuser2 Cleartext-Password := “password2”
———-
- サービス再起動
systemctl enable freeradius
systemctl restart freeradius
- 接続検証(ローカル)
radtest testuser1 hello 127.0.0.1 0 testing123
radtest testuser2 hello 127.0.0.1 0 testing123
Received Access-Accept Id xx from 127.0.0.1:1812 to 127.0.0.1:37129 length 32
*Received Access-Accept が表示されることを確認
Wiress – Wireless Settings – 5GHz(2.4GHz) – Acction – Edit
SSID:Wifi_AP1 etc.
SSID Broadcat:EnableSecurity Mode:WPA-Enterprise
Version:WPA2-Enterprise
Encryption:AES
RADIUS Server IP:構築中のRadius ServerのIPアドレス
RADIUS Password:clients.confで設定したパスワード(secret = passwordのpassword)
- Windows
Wi-fi – アクセスポイント選択
ID: /etc/freeradius/3.0/usersに設定したID(testuser1)
PW: /etc/freeradius/3.0/usersに設定したPW(password1)
- Android
EAP方式:PEAP
フェーズ2認証:MSCHAPV2
ID: /etc/freeradius/3.0/usersに設定したID(testuser1)
PW: /etc/freeradius/3.0/usersに設定したPW(password1)
■ディレクトリー作成
mkdir -p /opt/pki
mkdir /opt/pki/configs
mkdir /opt/pki/crl
mkdir /opt/pki/RootCA
mkdir /opt/pki/InterCA
mkdir /opt/pki/Server
mkdir /opt/pki/client
■OpenSSL用コンフィグファイル作成(署名用)
証明書の有効期限:10年(default_days = 3650)
vi /opt/pki/configs/openssl_sign.cnf
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = ./
certs = $dir/certs
crl_dir = $dir/crl
database = $dir/index.txt
new_certs_dir = $dir/newcerts
serial = $dir/serial
crlnumber = $dir/crlnumber
crl = $dir/crl.pem
RANDFILE = $dir/.rand
name_opt = ca_default
cert_opt = ca_default
default_days = 3650
default_crl_days= 30
default_bits = 2048
default_md = sha256
preserve = no
policy = policy_match
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints=CA:true
keyUsage = cRLSign,keyCertSign
[ v3_server ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
[ v3_client ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
- 環境の初期化
cd /opt/pki/RootCA
mkdir newcerts
echo “01” > serial
echo “00” > crlnumber
touch index.txt
- RootCAの秘密鍵の作成
openssl genrsa \
-out RootCA_key.pem \
-aes256 \
-passout pass:password \
2048
- RootCAの秘密鍵で、RootCAの証明書署名要求を作成
openssl req -new \
-subj “/C=JP/ST=Tokyo/O=TEST/CN=RADIUS Root CA” \
-out RootCA_csr.pem \
-key RootCA_key.pem \
-passin pass:password
- RootCAの秘密鍵で、RootCAの証明書署名要求に署名する
openssl ca -config ../configs/openssl_sign.cnf -batch -extensions v3_ca \
-out RootCA_crt.pem \
-in RootCA_csr.pem \
-selfsign \
-keyfile RootCA_key.pem \
-passin pass:password
- 余計な文字列を取り除く
openssl x509 -in RootCA_crt.pem -out RootCA_crt.pem
- 環境の初期化
cd /opt/pki/InterCA
mkdir newcerts
echo “01” > serial
echo “00” > crlnumber
touch index.txt
- InterCAの秘密鍵の作成
openssl genrsa \
-out InterCA_key.pem \
-aes256 \
-passout pass:password \
2048
- InterCAの秘密鍵で、InterCAの証明書署名要求を作成
openssl req -new \
-subj “/C=JP/ST=Tokyo/O=TEST/CN=RADIUS Intermediate CA” \
-out InterCA_csr.pem \
-key InterCA_key.pem \
-passin pass:password
- RootCAの秘密鍵で、InterCAの証明書署名要求に署名をする。
cd /opt/pki/RootCA
openssl ca -config ../configs/openssl_sign.cnf -batch -extensions v3_ca \
-out ../InterCA/InterCA_crt.pem \
-in ../InterCA/InterCA_csr.pem \
-cert RootCA_crt.pem \
-keyfile RootCA_key.pem \
-passin pass:password
- 余計な文字列を取り除く
cd /opt/pki/InterCA
openssl x509 -in InterCA_crt.pem -out InterCA_crt.pem
- チェーン証明書の作成
cd /opt/pki/
openssl x509 -in RootCA/RootCA_crt.pem -out chainCA_crt.pem
openssl x509 -in InterCA/InterCA_crt.pem >> chainCA_crt.pem
- サーバ証明書発行
(radiusサーバ用の新規ディレクトリを作成する)
mkdir -p /opt/pki/Server/radius
cd /opt/pki/Server/radius
(パスワード無し秘密鍵とCSRを同時に発行)
openssl req -new \
-out radius_csr.pem \
-newkey rsa:2048 \
-nodes \
-keyout radius_key.pem \
-subj “/C=JP/ST=Tokyo/O=TEST/CN=radius.test.local”
(RootCAで署名)
cd /opt/pki/RootCA
openssl ca -config ../configs/openssl_sign.cnf -batch -extensions v3_server \
-out ../Server/radius/radius_crt.pem \
-in ../Server/radius/radius_csr.pem \
-cert RootCA_crt.pem \
-keyfile RootCA_key.pem \
-passin pass:password
(余計な文字列を取り除く)
cd /opt/pki/Server/radius
openssl x509 -in radius_crt.pem -out radius_crt.pem
■クリーンアップ
cd /etc/freeradius/3.0/certs
rm -f *csr *key *p12 *pem *crl *crt *der *mk *txt *attr *old serial dh
■DHファイルの作成
openssl dhparam -5 -out /etc/freeradius/3.0/certs/dh 1024
■各証明書の配置(コピー)
cp /opt/pki/Server/radius/radius_key.pem /etc/freeradius/3.0/certs
cp /opt/pki/Server/radius/radius_crt.pem /etc/freeradius/3.0/certs
cp /opt/pki/chainCA_crt.pem /etc/freeradius/3.0/certs
■証明書ディレクトリの設定を変更
cd /etc/freeradius/3.0/mods-available/
cp eap eap.org
vi /etc/freeradius/3.0/mods-available/eap
——————–
default_eap_type = tls
private_key_password = password
private_key_file = ${certdir}/radius_key.pem
certificate_file = ${certdir}/radius_crt.pem
ca_file = ${cadir}/chainCA_crt.pem
dh_file = ${certdir}/dh
——————–
■グループ変更(グループ:freeradに変更しないとファイルを読み込めない)
cd /etc/freeradius/3.0/certs
chown freerad:freerad chainCA_crt.pem radius_crt.pem radius_key.pem dh
■radius_client01クライアント用の新規ディレクトリを作成する
mkdir -p /opt/pki/client/radius_client01
cd /opt/pki/client/radius_client01
■パスワード無し秘密鍵とCSRを同時に発行
openssl req -new \
-out radius_client01_csr.pem \
-newkey rsa:2048 \
-nodes \
-keyout radius_client01_key.pem \
-subj “/C=JP/ST=Tokyo/O=TEST/CN=radius_client01.test.local”
■InterCAで署名
cd /opt/pki/InterCA
openssl ca -config ../configs/openssl_sign.cnf -batch -extensions v3_client \
-out ../client/radius_client01/radius_client01_crt.pem \
-in ../client/radius_client01/radius_client01_csr.pem \
-cert InterCA_crt.pem \
-keyfile InterCA_key.pem \
-passin pass:password
■余計な文字列を取り除く
cd /opt/pki/client/radius_client01
openssl x509 -in radius_client01_crt.pem -out radius_client01_crt.pem
■Windows用のPKCS#12:秘密鍵と証明書をまとめたファイルを作成
(-passoutでエクスポート用パスワード “password” を設定)
openssl pkcs12 -export \
-inkey radius_client01_key.pem \
-in radius_client01_crt.pem \
-certfile ../../chainCA_crt.pem \
-out radius_client01_crt.p12 \
-passout pass:password
■Android用のPKCS#12:秘密鍵と証明書をまとめたファイルを作成
(スマホ[Android/iPhone] は、-legacyを付けないとダメだった)
openssl pkcs12 -export \
-inkey radius_client03_key.pem \
-in radius_client03_crt.pem \
-certfile ../../chainCA_crt.pem \
-legacy \
-out radius_client03_crt.p12 \
-passout pass:password
- Windows
クライアント証明書(例 radius_client01_crt.p12)をWindowsPCにコピーし、
ダブルクリックでインストール
Wi-fi – アクセスポイント選択
セキュリティーの種類:WPA2-エンタープライズ
暗号化の種類:AES
ネットワークの認証方法の選択:Microsoft:スマートカードまたはその他の認証
接続のための認証方法:このコンピュータの証明書を使う
証明書を検証してサーバーのIDを検証する
信頼されたルート証明書:インストールした証明書を選択
*過去、同じSSIDで設定済みの場合は、過去設定を削除してから設定
- Android
クライアント証明書(例 radius_client01_crt.p12)をメールで送付し、
スマホでダウンロード&インストール
EAP方式:TLS
ユーザー証明書:インストールした証明書
CA証明書:インストールした証明書
ID:サーバー証明書のCN(radius.test.local)
ユーザー: /etc/freeradius/3.0/usersに設定したID(testuser1)
*過去、同じSSIDで設定済みの場合は、過去設定を削除してから設定 - iPhone
クライアント証明書(例 radius_client01_crt.p12)をメールで送付し、
スマホでダウンロード&インストール
ユーザー名: /etc/freeradius/3.0/usersに設定したID(testuser1)
ID:サーバー証明書のCN(radius.test.local)
モード:EAP-TLS
*過去、同じSSIDで設定済みの場合は、過去設定を削除してから設定
■Freeradiusをデバッグモードで起動
systemctl stop freeradius
freeradius -X
Ready to process requests と表示されたら接続
Login OK: [client01.test.local/] と表示されたらOK
■Failed to start FreeRADIUS multi-protocol policy server.
EAP-PEAPとEAP-TLS両方有効になっているので、EAP-TLSのみに変更
vi /etc/freeradius/3.0/mods-available/eap
↓のようにpeap部をコメントアウト
# peap {
# tls = tls-common
# default_eap_type = mschapv2
# copy_request_to_tunnel = no
# use_tunneled_reply = no
# }
systemctl restart freeradiusを実行
【FreeRADIUS on Ubuntu 22.04】EAP-PEAP認証の検証環境を作ってみよう!
OpenSSLでプライベート認証局の構築(ルートCA、中間CA)
Installing pcks12 certificate in android “wrong password” bug
Configuration Guide on EAP-TLS authentication for WPA-Enterprise (with FreeRADIUS)