Sunset New York


Date/Time: 2006:08:05 20:04:25
Camera: FUJIFILM
Model: FinePix F401
Exporsure Time: 1/210
FNumber: 2.8
Aperture Value: 3.0
Focal Length: 17.1

Close

y2blog » LeopardサーバのRADIUS #5 : 証明書の設定

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 CA SETUP 01

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”ボタンを押します.

Add Certificate Dialog 01

パスワードを聞いてきますので、PKCS#12形式のファイル作成時に設定されたパスワードを入力します.

Password Dialog 01

今回作成した証明書はプライベート形式の証明書なので、信頼できないという確認のダイアログが現れる.念のため “Show Certificate” で内容を確認しておきましょう.admin権限を持っている場合は “Always Trust” を選択するとコンピュータのシステムキーチェインに登録されます.admin権限を持っていない場合は “Don’t Trust” を選びます.ユーザの証明書と秘密鍵、CA証明書がキーチェインに登録されます.

Confirmation Dialog 01 

Keychain List 01

“Always Trust” を選んだ場合は、システムにCA証明書が信頼できるCAとして登録され、証明書の簡易的なお墨付きが得られます.

Keychain List 02


Windows XP の場合
 

Windowsの場合は MMC管理コンソールを使って証明書を管理するのですが、クライアント証明書はファイルの拡張子を “.pfx” に変更してダブルクリックすると、『証明書のインポートウィザードの開始』という画面が現れるので、このウィザードに従って証明書をインストールすることができます.

  • change the file extension 拡張子を .pfx に変更する

  • CA Import Wizard インポートウィザードが起動

  • CA Import Wizard 03 インポートするファイルの指定

  • CA Import Wizard 04 ファイルパスワードの入力

  • CA Import Wizard 05 証明書の保管場所の指定

  • CA Import Wizard 06 証明書のインストール完了

  • Confirmation Dialog Win 証明書のインストールの確認