2010/02/17

freeradiusでのCRLのテスト

せっかく導入したEAP-TLSですが、鍵ファイルが一人歩きしないように再発行の仕組みが必要です。

新しくクライアント用に鍵ファイルを作成する事は手順の繰り返しなので簡単ですが、古い鍵ファイルが使われないようにするためにCertificate Revocation List(CRL)ファイルをfreeradiusで使うようにしました。

CA局側での操作

作業自体は他のCA局でも可能ですが、ここでは鍵ファイルを発行したCA局で作業を行なっています。

現在無線LANのクライアント認証に使っている鍵ファイルを"demoCA/newcerts"ディレクトリから探してきて失効処理を行ないます。

公開鍵ファイルはどこにあっても良いはずですが、作成した鍵一式は既にPCに移動してしまったので、このファイルを使いました。

$ openssl ca -revoke demoCA/newcerts/D5F1DF1134CF2B80.pem

revoke時の画面出力

Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Revoking Certificate D5F1DF1134CF2B80.
Data Base Updated
CRLファイルの作成

失効した鍵情報を含むCRLファイルを作成します。

$ openssl ca -gencrl -out demoCA/crl/crl.20100217.pem
作成したファイルの転送

CRLファイルをfreeradiusが稼働するサーバに転送します。

$ scp demoCA/crl/crl.20100217.pem 192.168.10.10:

freeradiusサーバ側での作業

鍵ファイルの配置

freeradiusサーバの/etc/freeradius/certs/crlディレクトリを作成します。 ここでcacert.pemとcrl.20100217.pemファイルの2つをコピーしてきます。

$ sudo mkdir /etc/freeradius/certs/crl
$ sudo cp ~/crl.20100217.pem /etc/freeradius/certs/crl/
$ sudo cp /etc/freeradius/certs/cacert.pem /etc/freeradius/certs/crl/

ファイルを配置したらhashを作り直します。

$ sudo c_rehash /etc/freeradius/certs/crl/

c_rehashコマンド実行時の画面出力

Doing /etc/freeradius/certs/crl/
cacert.pem => 22f12cbd.0
crl.20100217.pem => 22f12cbd.r0

c_rehashコマンド実行後のディレクトリの様子

$ sudo ls /etc/freeradius/certs/crl/
22f12cbd.0  22f12cbd.r0  cacert.pem  crl.20100217.pem
eap.conf設定ファイルの編集

eap.confを編集して、CRLを有効にします。

--- /etc/freeradius/eap.conf.20100217	2010-02-16 15:55:18.000000000 +0900
+++ /etc/freeradius/eap.conf	2010-02-17 11:37:41.000000000 +0900
@@ -17,6 +17,8 @@
                 include_length = yes
                 check_cert_cn = %{User-Name}
                 cipher_list = "DEFAULT"
+		check_crl = yes
+		CA_path = ${certdir}/crl
         }
 } 

この後で、freeradiusを再起動すると設定が有効になり、いままで使っていた鍵ファイルが使えなくなりました。

さいごに

crlの運用について

今回は日付を付けてCRLファイルを出力しましたが、Revocation DateがCRLファイルに記録されているので、必要なら配布先のradiusなどのサーバ側で保存すれば良いのかなと感じました。

ただCRLファイルの管理や配布をどのようにするべきなのか、まとまった文書がみつからないので、まだ迷っているところでもあります。 商用のCA局の鍵には、"CRL Distribution Points"(CDP)なるExtensionが入っていてURLでDER形式のCLRファイルを配布していたりします。

Apache2やFreeradiusなどではCDPには対応していないようです。 そもそもサーバが直接インターネットに接続している状況がありえないので、サーバ系ではCRLファイルの管理、配布について考えておく必要がありそうです。

クライアント側ではCDPに対応するのは簡単でしょうし、実装していくべきだと思います。 cacertsにLAN内部からアクセスできるURLをCDP情報に含めて配布する事で、おもしろい実験になりそうです。

demoCA内部でのcrl.pemの配置場所

openssl.cnfファイルではデフォルトとして、demoCA/crl.pemファイルが指定されています。 しかしソースコードを"ENV_CRL"をキーにgrepしてみた限りでは、特に使われている形跡はありません。

"demoCA/crlnumber"ファイルはしっかりと、扱われているんですけどねぇ…。 crlファイルは、そもそもの配置場所からして、どう扱うべきなんでしょうか。

0 件のコメント: