無線LANのメリットや運用の注意点、電波や規格などの用語、要件定義や基本設計から
設定・構築・テストにいたるまで、たくさんのことをまとめています。
さらに、Arubaの機器を中心とした無線LANの設計と設定を解かりやすく解説しています。

タグ:CRL

FreeRadiusでEAP-TLS方式を利用し、かつCRLを有効にしている場合に起きる事象。

(1)発生事象
最初はきちんとつながっているが、ある日突然全クライアントがEAP-TLSで認証できなくなることがある。
オーセンティケータ(WLCやAP)側では認証失敗のメッセージが出るはず。

radiusd.logには次のようなメッセージが出る。
Error: --> verify error:num=12:CRL has expired
Error: TLS Alert write:fatal:certificate expired
Error:     TLS_accept: error in SSLv3 read client certificate B
Error: rlm_eap: SSL error error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned
Error: SSL: SSL_read failed in a system call (-1), TLS session fails.
Auth: Login incorrect (CRL has expired): [testuser6] (from client 10.0.1.135 port 0 cli 1ce62bbbd022)

(2)理由
理由は、CRLの有効期限が切れてしまっていること。CRLを有効にし、かつCRLの有効期限が切れてしまうと、EAP-TLSのすべての認証が失敗する。

CRLには有効期限があり、デフォルトでは30日になっている。設定箇所は/etc/pki/tls/openssl.cnfの下記の箇所。

default_days    = 365                   # how long to certify for
default_crl_days= 30                    # how long before next CRL

(3)対処方法
暫定対処
・CRLを再発行し、FreeradiusのCRLディレクトリにコピーする。

根本対処
・CRLの有効期限を長くする(例:1年とか)
・CRLの発行と、FreeradiusのCRLディレクトリへのコピーをcronなどで自動化する。



証明書はただのデータであり、無効にしたいからといって回収はできない。PKIにおいてはCRLという、証明書のブラックリストを管理するしくみで証明書を無効にするしくみがある。

CRLの作成方法は、こちらを参照のこと。
EAP-TLSでも、CRLを利用するようにしておかないと、漏洩した秘密鍵や退職した社員による情報漏えいが危惧される。

ここでは、FreeRadiusでCRLを参照し、無効になった電子証明書でのアクセスを拒否する設定を紹介する。

まず、CRLのファイルをFreeRadiusの証明書フォルダにコピーしておく。
認証局とFreeRadiusが同じサーバで動いていればシンボリックリンクを張ればよい。
# mkdir /etc/raddb/certs/crl
# ln -s /etc/pki/CA/crl/crl.pem /etc/raddb/certs/crl/

別のサーバで動いていれば、rsyncなりwgetで定期的、あるいはCRL発行の都度コピーしておく。

CRLを有効にするには、/etc/raddb/eap.conf ファイルを修正し、tlsセクションで次の2行を有効にしておく。
                        check_crl = yes
                        CA_path = ${cadir}/crl
このあと、CRLのディレクトリをハッシュ化する作業が必要。c_rehashコマンドが必要になるので、インストールする。
# yum install openssl-perl
c_rehashコマンドが使えるようになったら、/etc/raddb/certs/crl/に対して実行する。
# c_rehash /etc/raddb/certs/crl/
Doing /etc/raddb/certs/crl/
crl.pem => 3ccdfed5.r0
終わったら、radiusdをrestart。

無効化した証明書では、認証できないことを確認する。/var/log/radius/radius.logには次のようなログが残るはず。
Thu May  2 11:27:04 2013 : Error: --> verify error:num=23:certificate revoked
Thu May  2 11:27:04 2013 : Error: TLS Alert write:fatal:certificate revoked
Thu May  2 11:27:04 2013 : Error:     TLS_accept: error in SSLv3 read client certificate B
Thu May  2 11:27:04 2013 : Error: rlm_eap: SSL error error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned
Thu May  2 11:27:04 2013 : Error: SSL: SSL_read failed in a system call (-1), TLS session fails.
Thu May  2 11:27:04 2013 : Auth: Login incorrect (certificate revoked): [testuser4] (from client 10.0.1.135 port 0 cli 1ce62b******)

この作業を自動化するのであれば、
・CRLファイルの取得
・c_rehash
・radiusdのrestart
の実行をcronに組み込むようにする。ハッシュを再実行してもradiusdは自動的に再読み込みしてくれない。radiusdのrestartは必須。

・注意事項
CRLを使うときには、有効期限に注意が必要。詳しくは、こちらを参照。


スポンサードリンク

このページのトップヘ