西村です。 出遅れてしまいました。大変申し訳ございません。いろいろと確認のため調べていたら時間がかかってしまいました。 学認では、xmlsectoolというツールを使っています。 https://wiki.shibboleth.net/confluence/display/SHIB2/XmlSecTool samlsignとの差分を調べたことはありませんが、以下のような特徴があります。 - 前段階としてXMLのスキーマチェックを行なうことができる - OpenSSLの機能を使ってUSBトークン内の署名鍵も使える - パスワードのかかった署名鍵を使える(ただしコマンドラインオプションにパスワードを記述しなければならない) 手順は以下のようになります。Javaはすでにインストールされているものとしています。 (手順はバージョン1.1.4のものですが、最新版は1.1.5です。ハッシュ値は以下の通り。) 86da5e39508a5e80c51f6ffe680709828c806a3780a1fd192757cd44bd675391 xmlsectool-1.1.5-bin.zip ----- ここから 0. ツールの取得 $ cd ~ $ wget http://shibboleth.net/downloads/tools/xmlsectool/1.1.4/xmlsectool-1.1.4-bin.zip $ sha256sum xmlsectool-1.1.4-bin.zip 727e988b5a6f2652ea597dd847f00063e577d43da5901bb14efbf8aacd63bb77 xmlsectool-1.1.4-bin.zip $ unzip xmlsectool-1.1.4-bin.zip $ cd ~/xmlsectool-1.1.4 1. 署名鍵を生成 $ openssl genrsa -des3 2048 > test.key (適当なパスワードを設定) $ openssl rsa -new -key test.key -out test.crt -x509 -subj "/CN=Soft Signer" (上で設定した署名鍵のパスワードを入力) 2. gakunin-metadata-unsigned.xmlに対して署名を実行 $ env JAVA_HOME=/usr/lib/jvm/jre ./xmlsectool.sh --sign --inFile gakunin-metadata-unsigned.xml --outFile gakunin-metadata-signed.xml --key test.key --keyPassword '***' --certificate test.crt 事前にメタデータのスキーマをチェックする場合は、コマンドラインオプションの末尾に --validateSchema --schemaDirectory /usr/local/etc/schema を追加します。--schemaDirecotryには添付のようなスキーマを配置しておきます。 # 添付は、Shibboleth SPのパッケージから取得し、リモートスキーマを参照しないよう # に修正したものです。 おまけ. 署名検証 $ env JAVA_HOME=/usr/lib/jvm/jre ./xmlsectool.sh --verifySignature --signatureRequired --certificate test.crt --inFile gakunin-metadata-signed.xml ----- ここまで 出力例は以下になります。 https://metadata.gakunin.nii.ac.jp/gakunin-test-metadata.xml # 実は運用フェデレーションでは別の(古い)署名ツールを使っていますので出力が若干異なります。 # こちらもxmlsectoolに移行予定です。 > という判断をして,メタデータには validUntil 属性を設定しませんでした. validUntilについてはお書きの通り、過去の任意の時点のメタデータを誤って信頼 しないようにするためのもので、いちおう署名とは独立した機能(プラスαの機能) と考えて問題ありません。 また、validUntilが設定されていればそれで十分かというとそうではなく、有効な 期間を狭めている(例えば2週間とか)だけでその間は依然として攻撃される可能性 がありますので、インシデント発生時は(これもお書きの通りですが)管理者への連絡および 更新依頼が欠かせないことに変わりはありません。 ということで、土屋さんの選択に賛成です。 PS 思い付きで、IdPが1つでSPが複数あるシチュエーションでIdPのメタデータを配りたいという 要望であれば、IdPの署名機能が使えれば… と思ったのですが、メタデータに署名する という機能はありませんでした。 SPには「自分のメタデータに自分の鍵で署名する」という機能がありまして、それと混同していたようです。 https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPHandler#NativeSPHandler-MetadataGenerationHandler On 2012/06/27, at 16:31, TSUCHIYA Masatoshi wrote: > 土屋です. > > 表題の件,自己解決しました. > >>> On Tue, 26 Jun 2012 00:46:40 +0900 >>> xxxxxxxx@xxxxxx (TSUCHIYA Masatoshi) said as follows: > >> (2) または,xmlsec というコマンド以外に何か簡単な署名方法はあるのでしょ >> うか? > > Debian だと opensaml2-tools というパッケージに入っている samlsign という > ツールを使えば楽勝でした. > > 以下,手順の概要をまとめておきます. > > (1) OpenSSL でメタデータ署名用の鍵ペアを作る. > > openssl req -newkey rsa:2048 -keyout federation.key -keyform PEM -out federation.req -outform PEM > openssl x509 -in federation.req -out federation.cer -req -signkey federation.key -days 3650 > > (2) samlsign は暗号化された秘密鍵を読み込むことができないので,暗号化を > 解除しておく. > > openssl rsa -in federation.key -out federation_cleartext.key > > (3) samlsign でメタデータに署名する. > > samlsign -s -k ./federation_cleartext.key -c ./federation.cer -f ./unsigned_metadata.xml > metadata.xml > > 各ファイルは必ず絶対パスか ./ を省略しない相対パスかで記述する必要があり > ます.でないと,samlsign が /etc/openssl/ の下を探しに行ってエラーになり > ます. > > (4) 署名したメタデータをどこか適当なウェブサーバからダウンロードできるよ > うにしておく.例えば, > > https://idp.example.net/metadata/federation.xml > > (5) IdP で上記メタデータを読み込む設定をする.IdP が稼働しているサーバと > メタデータ配布サーバを同居させたので,特に難しいことはなく,relying-party.xml > に以下のように記述すれば良い > > <MetadataProvider id="ShibbolethMetadata" xsi:type="ChainingMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata"> > <MetadataProvider id="IdPMD" xsi:type="FilesystemMetadataProvider" > metadataFile="/usr/share/metadata/federation.xml" /> > (略) > </MetadataProvider> > > (5) メタデータの署名に使った公開鍵 federation.cer を,SP にコピーしておく. > > (6) SP で上記メタデータを読み込む設定をする. > /etc/shibboleth/shibboleth2.xml に以下を記述. > > <MetadataProvider type="Chaining"> > <MetadataProvider type="XML" uri="https://idp.example.net/metadata/federation.xml" > backingFilePath="/var/lib/shibboleth/federation.xml" > reloadInterval="3600"> > <!-- > <MetadataFilter type="RequireValidUntil" maxValidityInterval="2419200"/> > --> > <MetadataFilter type="Signature" certificate="/etc/shibboleth/federation.cer"/> > </MetadataProvider> > </MetadataProvider> > > 重要な注意点として,RequireValidUntil 属性をコメントアウトしている点があ > ります.この属性は,メタデータを定期的に更新することを強制することによっ > て,危殆化した IdP や SP をフェデレーションから排除するために必要な設定で > す.しかし,大学ローカルなフェデレーションの場合は, > > - 専任の運用担当者がいるわけではないので,定期的にメタデータに署名し直 > すのは負荷が高い. > > - 大学ローカルなフェデレーションですから,万一の場合は,全ての管理者に > 設定変更や更新を依頼することも難しくない. > > という判断をして,メタデータには validUntil 属性を設定しませんでした.そ > のため,SP 側では RequireValidUntil 属性をコメントアウトしておく必要が生 > じます. > > -- > 土屋 雅稔 ( TSUCHIYA Masatoshi ) -- 西村健 国立情報学研究所 TEL:03-4212-2890 # 4月から内線番号が変わりました
Attachment:
shibboleth-schema.zip
Description: Zip archive