署名アルゴリズムを次のように設定できます。
signature.setSignatureAlgorithm("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");
DigestMethod アルゴリズムをそのように設定する方法を見つけようとしています。OpenSAML API 経由で可能ですか? どんな入力でも大歓迎です。
更新: 明確にするためにサンプルの署名を追加します。この質問が関係しているのは、その中の DigestMethod 要素です。
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#_884D49DAD03AD60748547F8322C11AA0">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>...</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>...</ds:SignatureValue>
<ds:KeyInfo>
<ds:KeyName>...</ds:KeyName>
</ds:KeyInfo>
</ds:Signature>
更新:ウラジミールの答えは機能します。しかし、その解決策はスレッドセーフではないようですか? 私のアプリケーションでは、opensaml を 1 回だけブートストラップし、異なる署名アルゴリズムのように、異なる構成の異なるスレッドで使用します。スレッドセーフな方法でこれを行う方法はありますか?
更新: Shibboleth IdP は opensaml を使用します。Shibboleth IdP Wikiによると、これは現在グローバル構成です。そのため、IdP または SP 側に関係なく、opensaml を使用して SAML メッセージを処理する場合、この制限が存在するはずです。以下はその記事からの抜粋です。
IdP 署名/ダイジェスト アルゴリズムおよび関連する設定の変更は、現在グローバルな操作です。アルゴリズムは、対話するすべての依拠当事者に対して変更されます。選択した新しいアルゴリズムを使用してすべての依拠当事者が応答を処理できることを確認するまで、この変更を行わないでください。
更新: 最後に、これを行う方法を見つけました。回答として追加しました。