Dos Transformaciones en una firma digital(Enveloped Signature Transform, XPath Transform)
Hola, tengo un problema a la hora de realizar una firma digital para un webservices, me pide que tenga una transformación Enveloped-Signature y después la transformación Xpath.
he logrado hacer la primera, pero transformarlo a Xpath no lo he podido hacer.
/*EN ESTA PARTE SE HACE LA TRANSFORMACION ENVELOPED*/
Reference ref = fac.newReference
("", fac.newDigestMethod(DigestMethod.SHA1, null),
Collections.singletonList
(fac.newTransform
(Transform.ENVELOPED, (TransformParameterSpec) null)),
null, null);
SignedInfo si = fac.newSignedInfo
(fac.newCanonicalizationMethod
(CanonicalizationMethod.INCLUSIVE,
(C14NMethodParameterSpec) null),
fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
Collections.singletonList(ref));
¿me puede ayudar a decirme como se puede hacer la segunda firma?
De antemano gracias por su ayuda...
- Inicie sesión o regístrese para enviar comentarios
Código
Hola, estoy realizando el método para realizar la firma digital de un xml con las características que mencionas. Es para la OPE cierto?
// Creamos XML Signature Factory
XMLSignatureFactory xmlSigFactory = XMLSignatureFactory.getInstance("DOM");
DOMSignContext domSignCtx = new DOMSignContext(privateKey, docXML.getDocumentElement());
Reference ref = null;
SignedInfo signedInfo = null;
// Transformadores
List<Transform> transforms = new ArrayList<Transform>();
transforms.add(xmlSigFactory.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null));
transforms.add(xmlSigFactory.newTransform(Transform.XPATH, new XPathFilterParameterSpec("ancestor-or-self::*[local-name()='" + XPathFilter + "']")));
try {
ref = xmlSigFactory.newReference("", xmlSigFactory.newDigestMethod(DigestMethod.SHA1, null), transforms, null, null);
signedInfo = xmlSigFactory.newSignedInfo(xmlSigFactory.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null), xmlSigFactory.newSignatureMethod(SignatureMethod.RSA_SHA1, null), Collections.singletonList(ref));
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
} catch (InvalidAlgorithmParameterException ex) {
ex.printStackTrace();
}
// Pasamos la llave publica (.cer)
KeyInfoFactory kif = xmlSigFactory.getKeyInfoFactory();
List<X509Certificate> x509Content = new ArrayList<X509Certificate>();
x509Content.add(x509C);
X509Data xd = kif.newX509Data(x509Content);
KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));
// Creamos un nuevo XML Signature
XMLSignature xmlSignature = xmlSigFactory.newXMLSignature(signedInfo, ki);
// Firmamos el documento
try {
xmlSignature.sign(domSignCtx);
} catch (MarshalException ex) {
ex.printStackTrace();
} catch (XMLSignatureException ex) {
ex.printStackTrace();
}
// Grabamos el documento firmado
return UtilXML.docToString(docXML);
}
Esa es la parte que llevo pero estoy teniendo un problema después de firmar el xml ya que modifica todas las tags del xml. Al parecer el detalle es con el transformador de XPath ya que si lo omito el xml se genera bien al parecer, pero falta ese transformador. Agradecería mucho tu ayuda si has logrado resolver esto. Saludos.