12
10
2007
LeopardサーバのRADIUS #5 : 証明書の設定
証明書をサーバとクライアントにインストールする
今回はOpenSSLのコマンドを用いて作成したサーバ証明書とクライアント証明書をインストールする手順について紹介します.作成したサーバ証明書は一般的なSSL証明書として使用可能ですので、RADIUSサーバの認証用途以外にもWEBサーバ(Apache 2)やOpenDirectoryのSSL通信用途としても使用可能です.Leopardサーバでは、サーバアプリケーション用の証明書は “/etc/certificates” に置くのが慣例の様ですので、予め作成した証明書や秘密鍵ファイルを適当な名前を付けてこのディレクトリに置いておきます.
RADIUSサーバの設定
RADIUSサーバに設定するには “ServerAdmin” の”RADIUS”ペーンを選択し、”RADIUS Certificate” のプルダウンメニューから “Custom Configuraion” を選びます.ファイルへのパスと秘密鍵のパスフレーズを入力し”OK”ボタンを押します.ダイアログ右下の”Save”ボタンを押して設定を書き込みます.
RADIUS関係の設定ファイルに設定した項目がきちんと書き込まれていれば問題ないのですが、何度か設定変更を繰り返していると、”ServerAdmin”を通じて変更を加えても上手く設定が反映されず、中途半端な設定となってしまい、RADIUSサーバがエラーとなって上手く起動しない事が多々ありました.このような場合は一旦”Default” の証明書に戻してから、再度設定し直すと上手く行った事がありました.RADIUSのログを見ると、”ServerAdmin” は “radiusconfig” というコマンドを発行して、RADIUS関係の設定ファイルを更新しているようです.
2007-12-10 01:45:33 +0900 - radiusconfig -installcerts /etc/certificates/server2.home.yoko.key.pem /etc/certificates/server2.home.yoko.cert.pem /etc/certificates/cacert.crt
2007-12-10 01:45:33 +0900 - command: /usr/bin/openssl rand -out **** 512
2007-12-10 01:45:33 +0900 - openssl command output:
unable to write 'random state'
2007-12-10 01:45:33 +0900 - radiusconfig -setcertpassword
設定ファイルがきちんと設定されているか確認しておきます.RADIUSのEAP認証関係の設定ファイルは “/etc/raddb/eap.conf”です.”EAP-TLS” セクションに証明書の設定箇所があります.
## EAP-TLS
#
# To generate ctest certificates, run the script
#
# ../scripts/certs.sh
#
# The documents on http://www.freeradius.org/doc
# are old, but may be helpful.
#
# See also:
#
# http://www.dslreports.com/forum/remark,9286052~mode=flat
#
tls {
private_key_password = ← 秘密鍵のパスフレーズが設定されていない!!!
private_key_file = /etc/certificates/server2.home.yoko.key.pem
# If Private key & Certificate are located in
# the same file, then private_key_file &
# certificate_file must contain the same file
# name.
certificate_file = /etc/certificates/server2.home.yoko.cert.pem
# Trusted Root CA list
CA_file = /etc/certificates/cacert.crt
dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random
前の記事で述べましたが、秘密鍵のパスフレーズが上手く設定されないバグが有るようです.このような中途半端な状態では次のようなエラーメッセージが出て、RADIUSサーバの起動に失敗します.このような場合には、”eap.conf” の “private_key_password” をマニュアルで修正して下さい.
Mon Dec 10 01:49:18 2007 : Error: radiusd.conf[10]: eap: Module instantiation failed.
Mon Dec 10 01:49:18 2007 : Error: radiusd.conf[1954] Unknown module "eap".
Mon Dec 10 01:49:18 2007 : Error: radiusd.conf[1897] Failed to parse authenticate section.
Mon Dec 10 01:49:18 2007 : Info: Using deprecated naslist file. Support for this will go away soon.
Mon Dec 10 01:49:18 2007 : Info: rlm_exec: Wait=yes but no output defined. Did you mean output=none?
Mon Dec 10 01:49:18 2007 : Info: rlm_eap_tls: Loading the certificate file as a chain
Mon Dec 10 01:49:18 2007 : Error: rlm_eap: SSL error error:0906A068:PEM routines:PEM_do_header:bad password read
Mon Dec 10 01:49:18 2007 : Error: rlm_eap_tls: Error reading private key file
Mon Dec 10 01:49:18 2007 : Error: rlm_eap: Failed to initialize type tls
“eap.conf” ファイル内に秘密鍵のパスフレーズをそのままプレーンテキストで記述するのはちょっと気になりますね.このような場合は、秘密鍵に次のような処理を行うことによって、秘密鍵のパスフレーズを記述しなくても済むようになります.
この方法は、LinuxなどでApche サーバをSSLで起動する際にも有効です.起動する度に毎回パスフレーズの入力を行わなくて済みます.LeopardサーバのApacheのSSL設定でも、RADIUSの設定と同じ”ServerAdmin”のバグがあるようですので、秘密鍵ファイルに手を加えてパスフレーズの入力を省いた秘密鍵ファイルを作成しておきます.この秘密鍵自体のセキュリティーが甘くなりますが、サーバ運用上の都合を優先させておきます.RADIUSの設定ファイル”eap.conf” の “private_key_password”の項目は空にしておきます.
sh-3.2# openssl rsa -in server2.home.yoko.key.pem -out server2.home.yoko.withpasskey.pem
Enter pass phrase for server2.home.yoko.key.pem: ← 秘密鍵のパスフレーズを入力
writing RSA key
sh-3.2# ls -la
total 88
drwxr-xr-x 16 root wheel 544 Dec 10 02:22 .
drwxr-xr-x 135 root wheel 4590 Dec 9 02:01 ..
-rw-r--r--@ 1 root wheel 0 Nov 9 21:13 .defaultCertificateCreated
-rw-r--r-- 1 root wheel 660 Nov 9 21:13 Default.crt
-rw-r----- 1 root certusers 1547 Nov 9 21:13 Default.crtkey
-rw-r----- 1 root wheel 534 Nov 9 21:13 Default.csr
-rw-r----- 1 root certusers 887 Nov 9 21:13 Default.key
-rw-r--r-- 1 root wheel 1298 Dec 9 00:23 cacert.crt
-rw-r--r-- 1 root wheel 3785 Dec 9 01:30 newcert.pem
-rw-r--r-- 1 root wheel 963 Dec 9 01:30 newkey.pem
-rw-r--r-- 1 root wheel 708 Dec 9 01:30 newreq.pem
-rw-r--r-- 1 root wheel 3785 Dec 9 02:39 server2.home.yoko.cert.pem
-rw-r--r-- 1 root wheel 963 Dec 9 02:39 server2.home.yoko.key.pem
-rw-r--r-- 1 root wheel 887 Dec 10 02:22 server2.home.yoko.withpasskey.pem
Apache 2 サーバのSSL設定
Apache 2 サーバのSSL設定ファイルは “/etc/apache2/sites” に置かれています.ファイル名はサーバの設定で異なりますが、HTTPSのポート番号の443が名前に付いているファイルです.”ServerAdmin” で上手く設定できない場合は、直接このファイルを修正して下さい.
sh-3.2# pwd
/etc/apache2/sites
sh-3.2# ls -la
total 40
drwxr-xr-x 7 root wheel 238 Dec 10 02:23 .
drwxr-xr-x 24 root wheel 816 Dec 10 02:23 ..
-r--r--r-- 1 root wheel 1740 Sep 24 14:23 0000_any_80_.conf.default
-rw-r--r-- 1 root wheel 1581 Dec 10 02:23 0000_any_80_server2.home.yoko.conf
-rw-r--r-- 1 root wheel 1677 Dec 10 02:23 0001_any_443_server2.home.yoko.conf
-rw-r--r-- 1 root wheel 601 Dec 10 02:23 virtual_host_global.conf
-r--r--r-- 1 root wheel 499 Sep 24 14:23 virtual_host_global.conf.default
<VirtualHost *:443>
ServerName server2.home.yoko
ServerAdmin admin@example.com
DocumentRoot "/Library/WebServer/Documents"
DirectoryIndex "index.html" "index.php"
CustomLog "/var/log/apache2/access_log" "%h %l %u %t \"%r\" %>s %b"
ErrorLog "/var/log/apache2/error_log"
ErrorDocument 404 /error.html
<IfModule mod_ssl.c>
SSLEngine On
SSLCertificateFile "/etc/certificates/server2.home.yoko.cert.pem"
SSLCertificateKeyFile "/etc/certificates/server2.home.yoko.withpasskey.pem"
SSLCipherSuite "ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:!SSLv2:+EXP:+eNULL"
SSLCertificateChainFile "/etc/certificates/cacert.crt"
</IfModule>
クライアント側の設定
認証方式としてEAP-TLS を選択した場合は、クライアント側(サプリカント)にも証明書をインストールしなければなりません.クライアント証明書がPKCS#12形式で配布されていればインストールは比較的簡単です.Mac OS X とWindows XP にインストールしてみます.
Mac OS X の場合
Mac OS X では”Keychain Access” がPKI証明書を一括して管理しています.PKCS#12形式のファイルを”Keychain Access” で開きます.このPKCS#12形式のファイルをダブルクリックすると、アプリケーションの関連付けが行われていなければどのアプリケーションで開くか問い合わせのダイアログが現れるので、”Keychain Access” を選んで下さい.
どのKeychainにインストールするかどうか聞いてくるので、”login” を選び”OK”ボタンを押します.
パスワードを聞いてきますので、PKCS#12形式のファイル作成時に設定されたパスワードを入力します.
今回作成した証明書はプライベート形式の証明書なので、信頼できないという確認のダイアログが現れる.念のため “Show Certificate” で内容を確認しておきましょう.admin権限を持っている場合は “Always Trust” を選択するとコンピュータのシステムキーチェインに登録されます.admin権限を持っていない場合は “Don’t Trust” を選びます.ユーザの証明書と秘密鍵、CA証明書がキーチェインに登録されます.
“Always Trust” を選んだ場合は、システムにCA証明書が信頼できるCAとして登録され、証明書の簡易的なお墨付きが得られます.
Windows XP の場合
Windowsの場合は MMC管理コンソールを使って証明書を管理するのですが、クライアント証明書はファイルの拡張子を “.pfx” に変更してダブルクリックすると、『証明書のインポートウィザードの開始』という画面が現れるので、このウィザードに従って証明書をインストールすることができます.