ATLAS日本基礎ネットワーク LCGミドルウエアトレーニングコース
ここでの目標
グリッドは世界中でいろいろな人が使います。そのために誰がグリッドにアクセスしようとしているかを判定する仕組みが必要です。それに用いられる仕組みが公開鍵暗号情報基盤とよばれるものです。
公開鍵暗号は非対称暗号とも言われ、公開鍵と秘密鍵という鍵対を使います。
公開鍵で暗号化された文書を秘密鍵で平文化できます。私の公開鍵を見て情報の送り側は私の公開鍵を使って情報を暗号化し、私に送ります。私はそれを自分の秘密鍵を使って平文化します。他の人は秘密鍵を手に入れない限りその情報を見ることが出来ません。
公開鍵の仕組みでは上の例とは逆に、秘密鍵で暗号化した情報(証明書)を公開鍵で平文化することも出来ます。ユーザの認証はこの方法を使います。証明書に添付された署名は誰でも公開鍵で平文化できますが、秘密鍵を知らない限り証明書を偽造することは出来ません。
ユーザがその本人である公平な第三者機関があります。認証局(Certification Authority, CA)と呼ばれます。認証局は次に述べる登録局で審査に合格したユーザについて証明書を発行します。その証明書には認証局の署名がつけられています。認証局の署名の暗号部分を公開鍵で平文化し、平文の部分と比較して一致することを確認することによって署名が本物であることが証明されます。
この証明書付きの鍵対を使うことによってグリッドのユーザとしての作業が出来るようになります。秘密鍵を使用する場合、それが持ち主によってなされていることを確認するためにパスフレーズが要求されます。それを行使しようとしたときに正しいパスフレーズを入力して初めてその行為が実行に移されます。
認証局は証明書を発行することを役割としています。証明書を発行すべきかどうかの判断は登録局(Registration Authority, RA)で行います。証明書発行を要求する人が本人であることを登録局は確認します。通常面接や電話での確認を伴います。KEKの登録局の場合、KEKのユーザ登録が必要です。
手順としては証明書要求を提出したユーザを登録局が確認し、本人であると判明したところで認証局にその証明書要求が渡されます。
通常これらの機能は同一の組織によって運営されるため区別はつきにくいかもしれません。
グリッドの作業は非常にたくさんの数のサーバを通して行うことになります。その都度鍵対を使って認証を行うと、その都度パスフレーズを入力する必要があり実際的ではありません。そのためにPKIインフラを拡張し、プロクシ(代理)認証という仕組みを用います。
プロクシ認証では、ユーザの鍵対の代わりに一時的な証明書を作成します。それを用いてサーバとの折衝に当たります。そのため、ユーザが毎回パスフレーズを入力する必要はありません。その代わり証明書の有効期限が通常12時間と短く設定されています。
一度作られたプロクシ証明書は期限切れもしくは破棄されるまで有効です。利用者がログアウトしても証明書は残っています。
12時間では長大ジョブを流すには短すぎるかもしれません。そのようなときに1週間程度のプロクシ証明を扱う仕組みも用意されています。
ここまではユーザとしての認証の話でした。本人だと認証されても計算資源を好きなだけ使うことが出来るわけではありません。
資源の割り当ては仮想組織(Virtual Organization, VO)単位で管理されます。そのため、ユーザは必ずいずれかのVOに属する必要があります。記憶装置はVO毎に割り当てられますし、CPUを使う場合もバッチキューがVO毎に用意されます。
本講習ではatlas_jというVOを使用します。LCGの場合はatlasというVOで作業をすることになります。
講習で発行された証明書はローカルなテストベッドでのみ有効なもので、これを使ってLCGにアクセスすることは出来ません。登録局、認証局としては現在KEK-CAが上位団体の承認を待っている段階です。LCGを使うためのユーザ証明書はKEK-CAが発行します。
国内には産総研(AIST)にも認証局があります。KEK-CA局が承認されるまでに(2006年2月頃)ユーザ証明書が必要な人はこちら(AIST-CA)に要求することになります。
KEK-CAの具体的な実装はまだ見ることは出来ませんが、基本的にAIST-CAと同じツールを使うことになります。AIST-CAについてはこちらをご覧ください。AIST-GRID-CA PKI Service
証明書はあらかじめKEKのローカルCA(正式なCAではない)で発行してもらったものを使います。
まずUIマシンにログインします。susy05.kobe.jp.hep.net
です。
ユーザの鍵対はユーザのホームディレクトリの下に.globusというサブディレクトリを用意します。その中にuserkey.pem
という秘密鍵とusercert.pem
という証明書付き公開鍵を保存します。
$ cd $ mkdir .globus
鍵対はあらかじめ用意してあります。
講習会では、鍵はgridtb01.icepp.jpに各人のアカウントとともに用意してあります。それぞれログインした後、鍵対をsusy05.kobe.jp.hep.netにコピーしてください。
鍵対を.globusにコピーしたら、誤って消してしまわないように属性を変更します。
$ chmod 444 usercert.pem $ chmod 400 userkey.pem
特に秘密鍵は他の人に見られないように管理する必要があります。
グリッドではない本格的なPKI、例えば電子商取引などでは秘密鍵は誰もがアクセスできるディスク上には置かず、USBメモリーなど脱着可能なデバイスに入れて必要なとき以外ははずしておきます。
ここまでの作業が正しくできているとグリッドミドルウエアは証明書を認識します。
$ grid-cert-info
証明書の情報が表示されました。
グリッドのサービスの一部はウェブサービスとして実装されています。そのため、証明書をウェブブラウザに組み込む必要があります。
ウェブブラウザで使われている鍵対のフォーマットはPEMではないpkcs12という形式になっています。こちらは鍵対が単一のファイルに書き込まれています。フォーマット変換はopensslというコマンドを使って行います。
$ openssl pkcs12 -export -inkey userkey.pem -in usercert.pem -out mycert.p12 -name "Atlas-J local"
これでpkcs12フォーマットのファイルmycert.p12が出来ます。
おそらく皆さんは別のマシンでウェブを見ているでしょうから、このファイルをそのマシンにダウンロードします。
ウェブブラウザによってやり方は少し違います。
場合によっては逆にウェブブラウザから証明書を取り出す必要があるかもしれません。その場合はまずブラウザから証明書を取り出します。ウェブブラウザによってやり方は少し違います。
取り出したpkcs12フォーマットのファイルをUIマシンにアップロードします。PEM形式に変換する必要があります。
$ openssl pkcs12 -nocerts -in mycert.p12 -out userkey.pem $ openssl pkcs12 -clcerts -nokeys -in mycert.p12 -out usercert.pem
これでPEM形式の鍵対が出来ました。
VOの管理はVOMS(Virutal Organization Membership Service)というサーバが行います。ここへのアクセスは3.3.で述べた証明書の組み込まれたウェブブラウザから行います。あなたがごらんのウェブブラウザに証明書が組み込まれていれば次をクリックしてください。
あらかじめatlas_J仮想組織に登録してもらってあります。
4.2.登録要求ページ
4.3.登録結果を待つ
ユーザはグリッドへのアクセスのためにUI(User Interface)マシンにログインする必要があります。講習ではsusy05.kobe.jp.hep.net
がそれです。
グリッドへのアクセスを行うためにはプロクシ証明書を作る必要があります。一旦作ると、それが有効な間、代理で認証をしてくれます。
$ grid-proxy-init Your identity: /C=jp/O=icepp/OU=testbed/OU=icepp.jp/CN=sakamoto Enter GRID pass phrase for this identity: Creating proxy .............................................. Done Your proxy is valid until: Tue Dec 13 15:06:34 2005
これでプロクシ証明書が作られました。グリッドでの作業が可能になりました。
プロクシ証明書の状態を確認します。
$ grid-proxy-info subject : /C=jp/O=icepp/OU=testbed/OU=icepp.jp/CN=sakamoto/CN=proxy issuer : /C=jp/O=icepp/OU=testbed/OU=icepp.jp/CN=sakamoto identity : /C=jp/O=icepp/OU=testbed/OU=icepp.jp/CN=sakamoto type : full legacy globus proxy strength : 512 bits path : /tmp/x509up_u507 timeleft : 11:58:51
証明書のあり場所や残りの有効期間などが表示されます。
作業が終わってこれ以上グリッドにアクセスする必要がなくなったら破棄します。(ほっておいても期限切れしてしまいますが)
$ grid-proxy-destroy
実際になくなったかどうか確認しましょう。
$ grid-proxy-info
ERROR: Couldn't find a valid proxy. Use -debug for further information.
なくなったようですね。
ユーザの証明書には初期パスフレーズが設定されています。これを変更しておきましょう。
$ grid-change-pass-phrase read RSA key Enter PEM pass phrase:(元のパスフレーズ) writing RSA key Enter PEM pass phrase:(新しいパスフレーズ) Verifying password - Enter PEM pass phrase:(新しいパスフレーズ)
次にいよいよグリッドジョブを走らせましょう。