はじめに
このエントリはCisco WLCのEAP-TLSをWLC自身で認証する、ローカルEAP(TLSのみ)の手順について記載します。
ローカルEAPではPEAPやLEAPの設定もできますが、ひとまずTLSのみです。
対象機器および環境
- Cisco Virtual Wireless LAN Controller (Ver.8.2.x)
- Windows10
このエントリを読むとできること
- WLCをRADIUSサーバ替わりにして
- EAP-TLS認証ができるようになる
はず。
関連するエントリ
Cisco WLCにSSIDを作成する(802.1X/PSK) コマンド編+よくつかうコマンド
Cisco WLC と FreeRADIUS を利用した EAP-TLS認証
OpenSSLでプライベート認証局の構築(ルートCA、中間CA)
前提条件
ローカルEAPは中間認証局に対応していないため、前回までのやり方が使えません。
なぜだ。。。
Cisco Wireless Controller Configuration Guide, Release 8.2
そして、日本語コンフィギュレーションガイドに当該の記載がなく、英語版には記載されている。章立ても違うみたい。
なぜなんだ。。。
Local authentication with certificates of second level hierarchy (CA + intermediate CA + device) is not supported.
いうわけで、今回はサーバ証明書もクライアント証明書もルートCAから発行しています。
WLCの設定
別エントリで構築したPKI環境 で証明書を発行していきます。
サーバ証明書発行
(VMwlc01というサーバに対して発行するので、新規ディレクトリを作成する)
mkdir -p /opt/pki/Server/VMwlc01
cd /opt/pki/Server/VMwlc01
(パスワード無し秘密鍵とCSRを同時に発行しています)
openssl req -new -out VMwlc01_csr.pem -newkey rsa:2048 -nodes -keyout VMwlc01_key.pem -subj "/C=JP/ST=Tokyo/O=EXAMPLE/CN=VMwlc01.example.net"
(RootCAで署名する)
cd /opt/pki/RootCA
openssl ca -config ../configs/openssl_sign.cnf -out ../Server/VMwlc01/VMwlc01_crt.pem -in ../Server/VMwlc01/VMwlc01_csr.pem -cert RootCA_crt.pem -keyfile RootCA_key.pem -passin pass:rootcaprivkeypass -batch -extensions v3_server
(余計な文字列を取り除きます)
cd /opt/pki/Server/VMwlc01
openssl x509 -in VMwlc01_crt.pem -out VMwlc01_crt.pem
(WLCに証明書と秘密鍵のセットをエクスポートするためPKCS#12ファイルを作成)
openssl pkcs12 -export -out VMwlc01_crt.p12 -in VMwlc01_crt.pem -inkey VMwlc01_key.pem -passout pass:exportpass
(WLCがPKCS#12をそのまま読めないのでPEM変換?する)
(最後の -passout は秘密鍵を "privkeypass" の文字列で暗号化)
openssl pkcs12 -in VMwlc01_crt.p12 -out VMwlc01_crt_final.pem -passin pass:exportpass -passout pass:privkeypass
WLCに証明書をインストール
ルートCA証明書
/opt/pki/
|-- RootCA
| |-- RootCA_crt.pem
| |-- RootCA_csr.pem
| |-- RootCA_key.pem
(RootCA_crt.pemがルートCA証明書)
上部メニュー「COMMANDS」→左側メニュー「DownloadFile」を選択
FileTypeは「Vendor CA Certificate」を選択
その下は転送方法を環境に合わせて修正
(下図では、FTPで転送してます)
転送がうまくいったら、次のメッセージが出るので、「ClickHere」のリンクをクリック
サーバ証明書
/opt/pki/
|-- Server
| |-- VMwlc01
| | |-- VMwlc01_crt.p12
| | |-- VMwlc01_crt.pem
| | |-- VMwlc01_crt_final.pem
(VMwlc01_rt_final.pemがサーバ証明書+秘密鍵)
上部メニュー「COMMANDS」→左側メニュー「DownloadFile」を選択
「FileType」は「Vendor Device Certificate」を選択
「Certificate Password」は作成時に設定した秘密鍵のパスワードを入力
(今回の例では privkeypass
です)
転送がうまくいったら、次のメッセージが出るので、「ClickHere」のリンクをクリック
WLCの証明書を確認
CA証明書
上部メニュ「SECURITY」→左側メニュ「Advanced」→「Vendor Certs」→「CA Certificate」
サーバ証明書
上部メニュ「SECURITY」→左側メニュ「Advanced」→「Vendor Certs」→「CA Certificate」
Local EAPの設定
ローカルEAPのプロファイルを作成して、WLANに適用させる。という流れです。
上部メニュ「SECURITY」→左側メニュ「Local EAP」→「Profiles」を選択し、画面右上の「New...」をクリック
プロファイル名は適当なものを入力し「Apply」をクリック(例では eap-tls
というプロファイル名にしています)
すると、一覧に表示されるので、作成したプロファイル名のリンクをクリック
デフォルトからの変更点は以下のとおり
- 「EAP-TLS」にチェック
- 「Client Certificate Required」にチェック
- 「Certificate Issuer」をVendorに変更
これをWLANに適用していきます。
上部メニュ「WLANs」で表示されるWLAN IDの数字をクリック
(今回はID1の IntraGeneral
に適用します)
「Security」タブの「AAA Servers」子タブを開きます。
「RADIUS Servers」の「Authentication Servers」にチェックが入っているはずなので、チェックをオフにします
もうすこし下に進んで、「Local EAP Authentication」にチェックを入れ、「EAP Profile Name」を先ほどLocalEAPで作成したプロファイル名にします。
最後に、画面右上の「Apply」をクリックします。
クライアント
クライアント証明書発行
(Client02というクライアントに対して発行するので、新規ディレクトリを作成する)
mkdir -p /opt/pki/Client/Client02
cd /opt/pki/Client/Client02
(パスワード無し秘密鍵とCSRを同時に発行しています)
openssl req -new -out Client02_csr.pem -newkey rsa:2048 -nodes -keyout Client02_key.pem -subj "/C=JP/ST=Tokyo/O=EXAMPLE/CN=Client02.example.net"
(RootCAで署名する)
cd /opt/pki/RootCA
openssl ca -config ../configs/openssl_sign.cnf -out ../Client/Client02/Client02_crt.pem -in ../Client/Client02/Client02_csr.pem -cert RootCA_crt.pem -keyfile RootCA_key.pem -passin pass:rootcaprivkeypass -batch -extensions v3_client
(余計な文字列を取り除きます)
cd /opt/pki/Client/Client02
openssl x509 -in Client02_crt.pem -out Client02_crt.pem
(クライアントに証明書と秘密鍵のセットをエクスポートするためPKCS#12ファイルを作成)
openssl pkcs12 -export -inkey Client02_key.pem -in Client02_crt.pem -certfile ../../chainCA_crt.pem -out Client02_crt.p12 -passout pass:exportpass
※この時の -passoutオプションで設定するパスワードはクライアントにインポートするときに必要
Windowsクライアント設定
動作確認
*EAP_Framework_0: Jan 05 13:31:33.439: 00:21:6a:ca:4a:a2 eap_tls.c-PEER-EVENT: New context (EAP handle = 13000008)
*EAP_Framework_0: Jan 05 13:31:33.439: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: Allocated new EAP-TLS context (handle = 69000008)
*EAP_Framework_0: Jan 05 13:31:33.439: eap_tls.c-AUTH-EVENT: Process Response, type: Identity
*EAP_Framework_0: Jan 05 13:31:33.439: eap_tls.c-AUTH-EVENT: Process Response: auth_complete:0, auth_success:0, eap-tls_FragsInQ: NO
*EAP_Framework_0: Jan 05 13:31:33.439: eap_tls.c-AUTH-EVENT: Sending Start Packet for TLS context 69000008
*EAP_Framework_0: Jan 05 13:31:33.439: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: EAP TLS start message received
*EAP_Framework_0: Jan 05 13:31:33.439: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: Setting up TLS SSL context
*EAP_Framework_0: Jan 05 13:31:33.439: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: Setting default PKI trustpoint to vendor
*EAP_Framework_0: Jan 05 13:31:33.439: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-ERROR: Unable to get peer identity - disabled
*EAP_Framework_0: Jan 05 13:31:33.489: eap_tls.c-AUTH-EVENT: Process Response, type: TLS
*EAP_Framework_0: Jan 05 13:31:33.489: eap_tls.c-AUTH-EVENT: Process Response: auth_complete:0, auth_success:0, eap-tls_FragsInQ: NO
*EAP_Framework_0: Jan 05 13:31:33.489: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: Queueing up fragment for TLS context 69000008
*EAP_Framework_0: Jan 05 13:31:33.489: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: EAP TLS handshake message received
*EAP_Framework_0: Jan 05 13:31:33.490: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: tls_send: 1096 byte eap packet sent
*EAP_Framework_0: Jan 05 13:31:33.490: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: SSL Handshake has signalled a read block
*EAP_Framework_0: Jan 05 13:31:33.609: eap_tls.c-AUTH-EVENT: Process Response, type: TLS
*EAP_Framework_0: Jan 05 13:31:33.609: eap_tls.c-AUTH-EVENT: Process Response: auth_complete:0, auth_success:0, eap-tls_FragsInQ: NO
*EAP_Framework_0: Jan 05 13:31:33.609: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: Queueing up fragment for TLS context 69000008
*EAP_Framework_0: Jan 05 13:31:33.609: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: Sending ACK for TLS context 69000008
*EAP_Framework_0: Jan 05 13:31:33.609: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: EAP TLS handshake message received
*EAP_Framework_0: Jan 05 13:31:33.609: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: SSL Handshake has signalled a read block
*EAP_Framework_0: Jan 05 13:31:33.668: eap_tls.c-AUTH-EVENT: Process Response, type: TLS
*EAP_Framework_0: Jan 05 13:31:33.668: eap_tls.c-AUTH-EVENT: Process Response: auth_complete:0, auth_success:0, eap-tls_FragsInQ: NO
*EAP_Framework_0: Jan 05 13:31:33.668: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: Queueing up fragment for TLS context 69000008
*EAP_Framework_0: Jan 05 13:31:33.668: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: EAP TLS handshake message received
*EAP_Framework_0: Jan 05 13:31:33.672: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: tls_send: 69 byte eap packet sent
*EAP_Framework_0: Jan 05 13:31:33.672: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: SSL Handshake complete. Outcome is Success
*EAP_Framework_0: Jan 05 13:31:33.742: eap_tls.c-AUTH-EVENT: Process Response, type: TLS
*EAP_Framework_0: Jan 05 13:31:33.742: eap_tls.c-AUTH-EVENT: Process Response: auth_complete:1, auth_success:1, eap-tls_FragsInQ: NO
*EAP_Framework_0: Jan 05 13:31:33.742: eap_tls.c-AUTH-EVENT: ACK received, sending Success
*EAP_Framework_0: Jan 05 13:31:33.742: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: Sending free context (EAP handle = 13000008)
*EAP_Framework_0: Jan 05 13:31:33.742: 00:21:6a:ca:4a:a2 eap_tls.c-AUTH-EVENT: EAP TLS cleanup SSL message received
さいごに
感想
WLCとRADIUSサーバはデータセンタに同居していることが多いのかな。
これ単体ではあんまり意味なさそうなので、これとFlexConnectのLocalAuthenticationを組み合わせれば、WAN切断時でもAPでTLS認証が継続できそう。
けど、いまのところうまくいってません。うまくいったらまた記載したいしたいと思います。
それはさておき。
はて、CRLはどこで設定するんだろ。。。
証明書のCDPを見に行ってくれてる?
もう少し追加検証が必要なようです。
出典
だいたいのことはコンフィギュレーションガイドにのってます。
Cisco Wireless Controller コンフィギュレーション ガイド、リリース 8.2
[ローカルEAPの章(コンフィギュレーションガイドの中)]
(https://www.cisco.com/c/ja_jp/td/docs/wireless/controller/8-2/config-guide/b_cg82/b_cg82_chapter_0110011.html)
おまけ
以下コピペでWLC用の証明書と、RootCAから発行するクライアント証明書の発行が可能。
mkdir -p /opt/pki/Server/VMwlc01
cd /opt/pki/Server/VMwlc01
openssl req -new -out VMwlc01_csr.pem -newkey rsa:2048 -nodes -keyout VMwlc01_key.pem -subj "/C=JP/ST=Tokyo/O=EXAMPLE/CN=VMwlc01.example.net"
cd /opt/pki/RootCA
openssl ca -config ../configs/openssl_sign.cnf -out ../Server/VMwlc01/VMwlc01_crt.pem -in ../Server/VMwlc01/VMwlc01_csr.pem -cert RootCA_crt.pem -keyfile RootCA_key.pem -passin pass:rootcaprivkeypass -batch -extensions v3_server
cd /opt/pki/Server/VMwlc01
openssl x509 -in VMwlc01_crt.pem -out VMwlc01_crt.pem
openssl pkcs12 -export -out VMwlc01_crt.p12 -in VMwlc01_crt.pem -inkey VMwlc01_key.pem -passout pass:exportpass
openssl pkcs12 -in VMwlc01_crt.p12 -out VMwlc01_crt_final.pem -passin pass:exportpass -passout pass:privkeypass
mkdir -p /opt/pki/Client/Client02
cd /opt/pki/Client/Client02
openssl req -new -out Client02_csr.pem -newkey rsa:2048 -nodes -keyout Client02_key.pem -subj "/C=JP/ST=Tokyo/O=EXAMPLE/CN=Client02.example.net"
cd /opt/pki/RootCA
openssl ca -config ../configs/openssl_sign.cnf -out ../Client/Client02/Client02_crt.pem -in ../Client/Client02/Client02_csr.pem -cert RootCA_crt.pem -keyfile RootCA_key.pem -passin pass:rootcaprivkeypass -batch -extensions v3_client
cd /opt/pki/Client/Client02
openssl x509 -in Client02_crt.pem -out Client02_crt.pem
openssl pkcs12 -export -inkey Client02_key.pem -in Client02_crt.pem -certfile ../../chainCA_crt.pem -out Client02_crt.p12 -passout pass:exportpass