コンテンツへスキップ
Tags

, ,

FreeRadiusでEAP-PEAP認証 or EAP-TLS認証

3月 14, 2023
  • 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(証明書が入った端末のみ接続)
    のどちらかで無線に接続できるようにする。
  1. https://ubuntu.com/download/server からISOイメージをダウンロード
  2. https://forest.watch.impress.co.jp/library/software/rufus/ からISOイメージをUSBメモリに書き込むツールをダウンロード、RufusでISOイメージを書き込む
  3. USBメモリから起動
  4. Language:English
  5. Installer update available:Continue without updating
  6. Keyboard configutation:Japanase
  7. Choose type of install:Ubuntu Server
  8. Network Connections:ネットワークケーブルを接続したインターフェース(NIC)が表示されていればOK
              固定IPアドレス推奨、とりあえずDHCPで設定して後から固定化でもOK
  9. Configure proxy:デフォルト
  10. Configure Ubuntu archive mirror:デフォルト
  11. Guided storage Configuration:Use an entire disk
  12. Storege Configuration:デフォルト
  13. Confirm destructive acion:Continue
  14. Profile setup:
    Your Name:gonbei Your Servername:radius Pick a username:hogehoge 
     Choose a password:passowrd Confirm password:password
  15. SSH setup:Install OpenSSH Server
  16. Featured Server Snaps:デフォルト
  17. 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)

From → サーバー

コメントする

コメントを残す