[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[upki-fed:00478] Re: how to sign metadata?
- Subject: [upki-fed:00478] Re: how to sign metadata?
- Date: Thu, 28 Jun 2012 20:41:22 +0900
- From: TSUCHIYA Masatoshi <xxxxxxxx@xxxxxx>
土屋です.
>> On Thu, 28 Jun 2012 15:35:29 +0900
>> xxxxxxx@xxxxxxxxx (Takeshi NISHIMURA) said as follows:
>学認では、xmlsectoolというツールを使っています。
>https://wiki.shibboleth.net/confluence/display/SHIB2/XmlSecTool
>samlsignとの差分を調べたことはありませんが、以下のような特徴があります。
>- 前段階としてXMLのスキーマチェックを行なうことができる
>- OpenSSLの機能を使ってUSBトークン内の署名鍵も使える
>- パスワードのかかった署名鍵を使える(ただしコマンドラインオプションにパスワードを記述しなければならない)
これはイマイチですね.
samlsign の仕様もイマイチなので,パスワードのかかっていない署名鍵を RAM
ディスク上に一時的に置くラッパースクリプトを書いて誤魔化しています.
>事前にメタデータのスキーマをチェックする場合は、コマンドラインオプションの末尾に
> --validateSchema --schemaDirectory /usr/local/etc/schema
>を追加します。--schemaDirecotryには添付のようなスキーマを配置しておきます。
なるほど,validation は重要ですね.
こちらも,運用手順に validation を組み込むことにしようと思って,少し調べ
ました.
https://wiki.shibboleth.net/confluence/display/SHIB2/MetadataCorrectness
に情報がありましたので,折角なので xmllint を試してみました.ところがこい
つが異様に misleading な出力をするので,小1時間はまりました.コマンド実行
例を以下に示します.
$ wget https://metadata.gakunin.nii.ac.jp/gakunin-test-metadata.xml
$ xmllint --schema http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd --noout --valid --load-trace gakunin-test-metadata.xml
Loaded URL="http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd" ID="(null)"
Loaded URL="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd" ID="(null)"
Loaded URL="http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/xenc-schema.xsd" ID="(null)"
Loaded URL="http://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd" ID="(null)"
Loaded URL="http://www.w3.org/2001/xml.xsd" ID="(null)"
Loaded URL="gakunin-test-metadata.xml" ID="(null)"
gakunin-test-metadata.xml:1: validity error : Validation failed: no DTD found !
g/2001/XMLSchema-instance" Name="GakuNin-test" validUntil="2012-07-12T14:00:00Z"
^
gakunin-test-metadata.xml validates
という表示「validity error」で validation が通っていると思います?
実は,これが validation は通っているらしいのです.明示的にスキーマで許さ
れていない構文要素を挿入した XML ファイルを作って xmllint にかけてみたと
ころ最後の行が,
corrputed.xml:7: element hello: Schemas validity error : Element '{urn:oasis:names:tc:SAML:2.0:metadata}hello': This element is not expected. Expected is one of ( {http://www.w3.org/2000/09/xmldsig#}Signature, {urn:oasis:names:tc:SAML:2.0:metadata}Extensions, {urn:oasis:names:tc:SAML:2.0:metadata}EntityDescriptor, {urn:oasis:names:tc:SAML:2.0:metadata}EntitiesDescriptor ).
corrputed.xml fails to validate
というように変わりました.いやはや.
># 添付は、Shibboleth SPのパッケージから取得し、リモートスキーマを参照しないよう
># に修正したものです。
わざわざローカル参照で済むように調整したスキーマを用意してくださってどう
も有難うございます.何回か validation をやってみて,www.w3.org からのダウ
ンロードの遅さにしいらいらしました.このスキーマを使う場合は,
$ xmllint --schema saml-schema-metadata-2.0.xsd --path `pwd`/schema --noout --valid --load-trace gakunin-test-metadata.xml
というように --path オプションでディレクトリを指定してやれば良いようです.
というわけで,本学のメタデータ署名手順も validation に失敗したメタデータ
を弾くようになりました.
なお,メタデータ署名鍵も key rollover を避けられないわけです.例えば,
$ openssl x509 -in gakunin-test-signer-2011.cer -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
dd:98:a1:aa:a7:b8:29:0e
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=JP, O=GakuNin TEST - Japanese Test Federation, CN=GakuNin TEST Metadata Signer
Validity
Not Before: Jan 14 11:29:30 2011 GMT
Not After : Jan 14 11:29:30 2021 GMT
なので,学認テストフェデレーションだと2021年に問題が発生します.この手順
は検討されたでしょうか? 普通に新しい鍵を用意して,新しい鍵を使って署名し
たメタデータと,古い鍵を使って署名したメタデータを一定期間並行配布するし
かないでしょうか?
1つの思いつきですが,メタデータ署名鍵を,さらに認証局で署名してもらったら
どうでしょう?
$ openssl req -newkey rsa:2048 -keyout federation.key -keyform PEM -out federation.req -outform PEM
$ openssl ca -in federation.req -config openssl.cnf
こうやって作ったメタデータ署名鍵は,大学ローカルな自己認証局の公開鍵
localca.pem で検証できるので,federation.cer を直接配布する代わり
に,localca.pem を配布するだけで済ませられないかなあ,TrustEngine の設定
でうまくできないかなあと暫く考えてみたのですが,ここで本日の作業時間切れ.
10年後の作業量を減らすために,今苦労するというのはモチベーションが維持し
にくいです.
--
土屋 雅稔 ( TSUCHIYA Masatoshi )