証明書はただのデータであり、無効にしたいからといって回収はできない。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を使うときには、有効期限に注意が必要。詳しくは、こちらを参照。