2016-11-29 1 views
0

Im Folgenden finden Sie die XML-Signaturschlüsselinformationen, die ich in Java generieren muss.Java XML WS-Sicherheitssignatur; X.509 Token-Profil; Hinzufügen einer Sicherheitstoken-Referenz

<ds:KeyInfo Id="idhere"> 
<wsse:SecurityTokenReference wsse11:TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1" wsu:Id="idhere" xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd"> 
<wsse:Reference URI="#X509" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1"/> 
        </wsse:SecurityTokenReference> 
       </ds:KeyInfo> 

Unten ist, wie weit ich in Java so weit gekommen. Wie füge ich eine Sicherheitstokenreferenz zu einer Schlüsselinfo hinzu?

KeyInfoFactory kif = fac.getKeyInfoFactory(); 

KeyInfo ki = kif.newKeyInfo(Collections.singletonList(Whatgoeshere?)); 


XMLSignature signature = fac.newXMLSignature(si, ki,null,"id-2FC89B275743456788xtdcfyvg9014",null); 

Alle benötigten zusätzlichen Informationen fühlen sich zu fragen, frei. Vielen Dank!

+0

Haben Sie jemals herausgefunden? –

Antwort

0

Ich habe mich heute ein bisschen selbst damit gekämpft, aber eine Lösung gefunden. Zum Erzeugen der Sicherheitstokenreferenz verwendete ich neben der javax.xml.crypto nämlich org.apache.ws.security eine zusätzliche Bibliothek. Die Idee besteht darin, eine Sicherheitstokenreferenz mit dem benötigten keyinfo zu erzeugen und dann das keyinfofactory zu verwenden, um das Objekt keyinfo zu erstellen.

Siehe Beispiel:

import org.apache.ws.security.message.token.DOMX509Data; 
    import org.apache.ws.security.message.token.DOMX509IssuerSerial; 
    import org.apache.ws.security.message.token.SecurityTokenReference; 

    import javax.xml.crypto.XMLStructure; 
    import javax.xml.crypto.dom.DOMStructure; 
    import javax.xml.crypto.dsig.keyinfo.*; 

    SecurityTokenReference secRef = new SecurityTokenReference(doc); 
       secRef.addWSSENamespace(); 

    String issuer = "issuer information"; 
    BigInteger serialNumber = new BigInteger("issuer serial number"); 
    DOMX509IssuerSerial domIssuerSerial = new DOMX509IssuerSerial(doc, issuer, serialNumber); 
    DOMX509Data domX509Data = new DOMX509Data(doc, domIssuerSerial); 
    secRef.setX509Data(domX509Data); 

    XMLStructure structure = new DOMStructure(secRef.getElement()); 
    KeyInfo keyInfo = keyInfoFac.newKeyInfo(java.util.Collections.singletonList(structure), "key-info"); 

Diese die keyinfo erzeugen würde wie folgt:

<ds:KeyInfo Id="key-info"> 
    <wsse:SecurityTokenReference> 
     <ds:X509Data> 
      <ds:X509IssuerSerial> 
       <ds:X509IssuerName>issuer information</ds:X509IssuerName> 
       <ds:X509SerialNumber>issuer serial number</ds:X509SerialNumber> 
      </ds:X509IssuerSerial> 
     </ds:X509Data> 
    </wsse:SecurityTokenReference> 
</ds:KeyInfo> 
Verwandte Themen