「Kerberos5 による GSSAPI Webサーバ認証のテスト」 2002-10-11 改訂1 2002-09-11 初版 # Heimdal-0.5 がリリースとなりました。 # heimdal と GSSAPI パッチの wazilla との認証のテスト手順を簡単に # まとめてみました。ここでは heimdal-0.4e と wazilla-1.0 で行ってい # ますが、heimdal-0.5 と wazilla-1.1 でも動作確認をしています。 # Plamo-Linux(http://www.linet.gr.jp/~kojima/Plamo/用のバイナリを # 作ってあります。 # http://www.linet.gr.jp/~juk/plamo/parts/3.0/Network/heimdal-0.5-i386-2.tgz # http://www.linet.gr.jp/~juk/plamo/parts/2.2.5/WWW/wazilla-1.1-gssapi-i386.tgz # http://www.linet.gr.jp/~juk/plamo/parts/3.0/WWW/apache_mod_ssl-2.8.11-1.3.27-i386-1.tgz # http://www.linet.gr.jp/~juk/plamo/parts/3.0/WWW/Module/mod_auth_gssapi-i386-3.tgz Kerberos5によるGSSAPI認証の実装が Daniel Kouril さんにより公開されま した。(2002/07/15, http://meta.cesnet.cz/software/heimdal/negotiate.en.html) この実装でWeb クライアントの認証を行えることに興味を持ち、簡単なテス トを行ってみました。この実装は、Heimdal(KTH版KerberosV)認証のための Mozilla(Netscape6相当) 用パッチと Apache Webサーバ用のmod_auth_gssapi モジュール、および、Heimdalのヘッダのパッチから構成されています。 インストールは、Apache Webサーバへのモジュール組み込み、 Mozilla ブラウザへのパッチとリメイク、そして、Heimdal KDC への khttp サービスの 登録し、その鍵をWebサーバに設置します。手順は以下のとおりです。 [インストール手順] 1.) Mozilla のリメイクは Heimdal のヘッダへのパッチを当ててから、 Mozillaへのパッチを当てて所定のオプションで構成して実行モジュールを構 築します。 - Heimdal 本体へのパッチはなく Mozilla をコンパイルするために gssapi.h を C++ で利用するためのパッチ、ヘッダだけ変えれば あえてheimdalリメイクの必要なし ftp://ftp.ayamura.org/pub/heimdal/heimdal-0.4e.tar.gz http://meta.cesnet.cz/software/heimdal/gssapi.h.patch - Mozilla へのパッチは部分的にリンクするライブラリのパスをサイ トに合わせて修正 http://meta.cesnet.cz/software/heimdal/mozilla.patch - Mozilla には mozilla-source-1.0 + wazilla-diff-1.0d を使用 http://ftp.mozilla.org/pub/mozilla/releases/mozilla1.0/src/mozilla-source-1.0.tar.bz2 http://downloads.sourceforge.jp/wazilla/561/wazilla-diff.tar.gz 2.) Apache へのモジュール組み込みは mod_auth_gssapi モジュールを所定 のオプションでコンパイルしてインストールします。 DSO モジュールとして apxs プログラムでコンパイルして組み込むことも可能です。 http://meta.cesnet.cz/software/heimdal/mod_auth_gssapi.c .../apache/bin/apxs \ -I/usr/include/openssl -I/usr/heimdal/include -I/usr/athena/include \ -L/usr/heimdal/lib -lgssapi -lkafs -lkrb5 -lasn1 -lroken -lcrypto -lresolv \ -L/usr/athena/lib -lkrb \ -o mod_auth_gssapi.so \ -c mod_auth_gssapi.c .../apache/bin/apxs -i -a -n gssapi_auth mod_auth_gssapi.so (注: このコマンドで httpd.conf に "AddModule mod_gssapi_auth.c" が 追加されてしまうので、"AddModule mod_auth_gssapi.c" に変更) 3.) 既に稼働中(構成済み)の Heimdal の KDC に khttp プリンシパルをWeb サーバマシンのインスタンスとともに登録し、取り出したキーテーブル (keytab)ファイルを所定の場所(GssKrb5Keytab ディレクティブにて指定)へ 配置します。現時点では、単一マシン構成のみのテスト。 - 以下のディレクティブを httpd.conf の所定のディテクトリに設定し、 Apache をリスタート -- GssKrb5Keytab ".../apache/keytab" GssAuth On require valid-user AuthName "KRB5 Realm" AuthType KerberosV5 -- - ログを出力するためには以下のコマンドを実行してからwazilla を起動 exort NSPR_LOG_MODULES=nsHttp:5 export NSPR_LOG_FILE=/tmp/moz.log - クレデンシャルを取得して wazilla を起動し所定のURIへアクセス するとそのコンテンツが表示される - wazilla がコンテンツの表示に成功したときは以下のログあり -- ... 1024[80888e0]: Creating nsHttpTransaction @86e01b8 1024[80888e0]: nsHttpTransaction::SetupRequest [this=86e01b8] 1024[80888e0]: http request [ 1024[80888e0]: GET / HTTP/1.1 1024[80888e0]: Host: mango.heimdal.rccm.jp 1024[80888e0]: User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020806 1024[80888e0]: Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1 1024[80888e0]: Accept-Language: en-us, en;q=0.50 1024[80888e0]: Accept-Encoding: gzip, deflate, compress;q=0.9 1024[80888e0]: Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66 1024[80888e0]: Keep-Alive: 300 1024[80888e0]: Connection: keep-alive 1024[80888e0]: Authorization: GSS-Negotiate ***************************************************************************************************************************************************************************************************************** ************************************************************************************************************************************************************************************************************************************************************** 1024[80888e0]: ] 1024[80888e0]: nsHttpHandler::InitiateTransaction 1024[80888e0]: nsHttpHandler::GetConnection_Locked 1024[80888e0]: nsHttpHandler::AtActiveConnectionLimit_Locked [host=mango.heimdal.rccm.jp:80 caps=1] 1024[80888e0]: total-count=0, persistent-count=0 1024[80888e0]: >> comparing against idle connection [conn=86de4a0 host=mango.heimdal.rccm.jp:80] 1024[80888e0]: reusing connection [conn=86de4a0] 1024[80888e0]: nsHttpHandler::DispatchTransaction_Locked [trans=86e01b8 conn=86de4a0] 1024[80888e0]: nsHttpConnection::SetTransaction [this=86de4a0 trans=86e01b8] ... -- - クレデンシャルが無い場合は認証のダイアログがポップアップするが、 入力すると "Internal Server Error" になり、error_log は以下のとおり -- [Mon Aug 19 16:58:18 2002] [crit] [client 192.168.200.167] configuration error: couldn't check user. No user file?: / -- - 上記ダイアログでキャンセルするともちろん "Authorization Required" 4.) Heimdalでの Kerberos5 認証を行うには、2.)の mod_auth_gssapi モジュー ルの組み込みに加えて、同サイトにある mod_auth_kerb モジュールを加えます。 組み込む順番は *_gssapi モジュールの方が先です。 http://meta.cesnet.cz/software/heimdal/mod_auth_kerb.c .../apache/bin/apxs -DKRB5 \ -I/usr/include/openssl -I/usr/heimdal/include -I/usr/athena/include \ -L/usr/heimdal/lib -lkrb5 -lkafs -l45 -lkrb5 -lasn1 -lroken -lcrypto -lresolv \ -L/usr/athena/lib -lkrb \ -o mod_auth_kerb.so \ -c mod_auth_kerb.c .../apache/bin/apxs -i -a -n kerb_auth mod_auth_kerb.so (注: このコマンドで httpd.conf に "AddModule mod_kerb_auth.c" が 追加されてしまうので、"AddModule mod_auth_kerb.c" に変更) - 以下のディレクティブを httpd.conf の所定のディテクトリに設定し Apache をリスタート -- GssKrb5Keytab "/opt/apache/keytab" GssAuth On require valid-user AuthName "KRB5 Realm" Krb5Keytab /opt/apache/keytab KrbAuthRealm HEIMDAL.RCCM.JP Krb5SaveCredentials On AuthType KerberosV5 -- - 3.)と同様に wazilla を実行し認証に成功したとき次のようなログあり -- ... 1024[80888e0]: Creating nsHttpTransaction @8624f20 1024[80888e0]: nsHttpTransaction::SetupRequest [this=8624f20] 1024[80888e0]: http request [ 1024[80888e0]: GET / HTTP/1.1 1024[80888e0]: Host: mango.heimdal.rccm.jp 1024[80888e0]: Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1 1024[80888e0]: Accept-Language: ja, en-us;q=0.66, en;q=0.33 1024[80888e0]: Accept-Encoding: gzip, deflate, compress;q=0.9 1024[80888e0]: Accept-Charset: EUC-JP, utf-8;q=0.66, *;q=0.66 1024[80888e0]: Keep-Alive: 300 1024[80888e0]: Connection: keep-alive 1024[80888e0]: Authorization: Basic ************ 1024[80888e0]: ] 1024[80888e0]: nsHttpHandler::InitiateTransaction 1024[80888e0]: nsHttpHandler::GetConnection_Locked 1024[80888e0]: nsHttpHandler::AtActiveConnectionLimit_Locked [host=mango.heimdal.rccm.jp:80 caps=1] 1024[80888e0]: total-count=0, persistent-count=0 1024[80888e0]: >> comparing against idle connection [conn=871b510 host=mango.heimdal.rccm.jp:80] 1024[80888e0]: reusing connection [conn=871b510] 1024[80888e0]: nsHttpHandler::DispatchTransaction_Locked [trans=8624f20 conn=871b510] 1024[80888e0]: nsHttpConnection::SetTransaction [this=871b510 trans=8624f20] ... -- - 認証に失敗すると "このページには内容がありません" がポップアップされ、 error_log に "child pid xxxxx exit signal Segmentation fault (11)"が 10行ほど書かれる - mod_auth_kerb モジュールがロードされているとクレデンシャルに Krb* が無くてもこの認証をしようとしてエラーになる -- Origin -- Date: Wed, 11 Sep 2002 11:21:21 +0900 (JST) From: Jun Kuwamura To: krb-jp at stealth.rccm.co.jp Subject: [Krb-jp 5] Re: Kerberos authentication in HTTP (fwd)