[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[upki-fed:00475] Re: how to sign metadata?



土屋です.

表題の件,自己解決しました.

>> 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 )