Wie Sie festlegen, Unterschrift DigestMethod algorithm mit OpenSAML
Können wir den Algorithmus der Signatur wie folgt:
signature.setSignatureAlgorithm("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");
Ich versuche einen Weg zu finden, um die DigestMethod algorithm so. Ist es möglich über OpenSAML-APIs? Jede Eingabe wird sehr geschätzt.
UPDATE: Hinzufügen eines Beispiel-Signatur für die Klarheit. Was diese Frage betrifft, ist die nach der DigestMethod-element in es.
<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>
UPDATE: Vladimír Antwort funktioniert. Jedoch, die Lösung scheint zu sein, thread unsicher? In meiner Anwendung, die wir bootstrap opensaml nur einmal und dann von verschiedenen threads mit unterschiedlichen Konfigurationen - wie verschiedene Signatur-algorithmen. Gibt es eine Möglichkeit, dies in einem thread-sichere Weise?
UPDATE:
Shibboleth IdP verwendet opensaml, und nach Shibboleth IdP-Wiki dies ist derzeit eine Globale Konfiguration. Also, unabhängig von IdP oder SP-Seite, diese Einschränkung sollte vorhanden sein, wenn opensaml ist zum verarbeiten von SAML-Nachrichten. Folgende ist ein Auszug aus diesem Artikel:
Änderung der IdP Signatur/digest-Algorithmus und die zugehörigen Einstellungen ist
derzeit ist eine Globale operation. Der Algorithmus geändert werden, für alle
relying parties es interagiert mit. Diese änderung nicht vornehmen, bis Sie
überprüft haben, dass alle Ihre vertrauende Parteien behandeln können Antworten mit
der neue Algorithmus(s) Sie wählen
UPDATE: Endlich einen Weg gefunden, dieses zu erhalten getan. Hinzugefügt haben Sie als Antwort.
- Nicht, dass das, was die sha256 am Ende ist?
- Soweit ich das verstehe Signatur-Algorithmus und DigestMethod algorithm (die in der Reference-element) sind zwei verschiedene Dinge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie folgenden Aufruf irgendwo während der Initialisierung der Anwendung:
Diese getan werden könnte, thread-sicher durch ändern der Signatur die Referenzen Inhalte nach dem setzen der Signatur - [1].
z.B.
[1] https://lists.internet2.edu/sympa/arc/mace-opensaml-users/2007-10/msg00003.html
Suche durch die OpenSAML Quelle, ein anderer Ansatz wäre eine Verlängerung der DefaultBootstrap, und DefaultSecurityConfigurationBootstrap Klassen, so thta diese Konfiguration ist für alle Ihre SAML-Implementierung.
Den CustomSamlBootstrap Klasse kann dann verwendet werden, anstelle der DefaultSamlBootstrap initialisieren Sie Ihr system.
Beispiel:
Und
Edit: Sah, dass Sie wollte verwenden verschiedene security-Konfigurationen für verschiedene threads.
Für dieses, möchten Sie vielleicht zu erweitern, die am besten geeignete Unterklasse von BaseSAML2MessageEncoder überschreiben der signMessage Funktion. Dann pass YourCustomSecurityConfigurationBootstrap wie nötig, um die SecurityHelper.prepareSignatureParams(Unterschrift Unterschrift Anmeldeinformationen signingCredential,
SecurityConfiguration config, String keyInfoGenName) - Methode.