
共通連合IdPとSPのメタデータを提供します。更新ポリシーでは、メタデータ集約最新バージョンを使用してください。InCommon SPを強く推奨しますメタデータの更新と検証少なくとも毎日。
提供されている指示に従ってメタデータの消費ページで、集約をダウンロードし、メタデータ署名証明書の正規のコピーを取得します。
次に、「ダウンロードしたメタデータのXML署名を検証する」という項目があります。ここで問題が発生しています。ダウンロードしたメタデータを検証することはできますが、埋め込まれたx509証明書ただし、別途ダウンロードしたメタデータ署名証明書を使用して検証することはできません。
InCommon からダウンロードした 2 つのファイルがあります。
- xml:
InCommon-metadata-idp-only.xml
- 秘密署名キー:
inc-md-cert.pem
次のコマンドを実行できるはずだと思いました:
# xmlsec1 --verify \
--id-attr:ID urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor \
--privkey-pem ./inc-md-cert.pem \
./InCommon-metadata-idp-only.xml
「./inc-md-cert.pem から秘密鍵をロードできませんでした」と表示され、失敗します。 . を使用して有効な鍵が含まれていることを確認できます(読み取り可能であり、正しいパスです)。またはopenssl x509 -text -in ./inc-md-cert.pem
. を使用して参照した場合も、同じように失敗します。--privkey-pem
--pubkey-pem
ここで、代わりに を使用すると--pubkey-cert-pem ./inc-md-cert.pem
、 と表示され、エラーなしで実行されますOK SignedInfo References (ok/all): 1/1
。
しかし、明らかに私の秘密署名キーは無視され、metadata.xml ファイルに埋め込まれたキーに基づいて検証が行われているだけです。(引数を--pubkey-cert-pem
完全に削除しても、埋め込まれた x509 証明書を使用して検証は引き続き機能します。)
アップデート
提供された署名ファイルは(組織によって)自己署名されているため、信頼できる証明書として追加してみました。たとえば、openssl で基本的な検証を試みる場合は、次を比較してください。
# openssl verify ./inc-md-cert.pem
error 18 at 9 depth lookup:self signed certificate
# openssl verify -CAfile ./inc-md-cert.pem ./inc-md-cert.pem
./inc-md-cert.pem: OK
それが問題ならどうする?--trusted-pem
オプションを追加してみる
# xmlsec1 --verify \
--id-attr:ID urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor \
--privkey-pem ./inc-md-cert.pem \
--trusted-pem ./inc-md-cert.pem \
./InCommon-metadata-idp-only.xml
func=xmlSecOpenSSLAppKeyLoadBIO:file=app.c:line=263:
obj=unknown:subj=PEM_read_bio_PrivateKey and PEM_read_bio_PUBKEY:
error=4:crypto library function failed:
func=xmlSecOpenSSLAppKeyLoad:file=app.c:line=153:
obj=unknown:subj=xmlSecOpenSSLAppKeyLoadBIO:
error=1:xmlsec library function failed:
filename=/tmp/inc-md-cert.pem;errno=2
func=xmlSecAppCryptoSimpleKeysMngrKeyAndCertsLoad:file=crypto.c:line=118:
obj=unknown:subj=xmlSecCryptoAppKeyLoad:
error=1:xmlsec library function failed:uri=./inc-md-cert.pem
Error: failed to load public key from "./inc-md-cert.pem".
Error: keys manager creation failed
これはそれほど難しいことではないはずなので、私の根本的な間違いだと思います。外部キー (InCommon 提供) を使用してメタデータ ファイル (InCommon 提供) の署名を検証するにはどうすればよいでしょうか?
答え1
少し不満ではありますが、解決策が 1 つあります。
a) InCommonメタデータファイルを確認する埋め込まれた証明書を使用する。
# xmlsec1 --verify --id-attr:ID \
urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor \
./InCommon-metadata-idp-only.xml
OK
SignedInfo References (ok/all): 1/1
Manifests References (ok/all): 0/0
b) 次に、埋め込まれた証明書と個別にダウンロードした証明書を比較します。空白を除いて一致するはずです。どちらかの証明書が連鎖している可能性がありますが、比較の目的では無視してください。
答え2
かなり苦労した後、コマンドラインに追加してみるとよいことがわかりました--enabled-key-data
。たとえば、次のようになります。
--enabled-key-data rsa
または
--enabled-key-data x509
どちらもうまくいくはずです。また、
xmlsec1 --list-key-data
選択できるものを確認します。
あなたの場合は、
xmlsec1 --verify \
--enabled-key-data rsa \
--id-attr:ID urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor \
--pubkey-cert-pem ./inc-md-cert.pem \
./InCommon-metadata-idp-only.xml
あなたがしたいことをすればいいのです。