none
No puedo firmar un xml RRS feed

  • Pregunta

  • public partial class Form1 : Form

    { public XmlDocument DocXML { get; set; } public Form1() { InitializeComponent(); } private void btnAbrirXML_Click(object sender, EventArgs e) { this.DocXML = null; if (fd.ShowDialog() == DialogResult.OK) { this.DocXML = new XmlDocument(); this.DocXML.PreserveWhitespace=true ; DocXML.Load(fd.FileName); rTxtXML.Text = this.DocXML.OuterXml; } } private void btnFirmarXML_Click(object sender, EventArgs e) { try { CspParameters cspParams = new CspParameters(); cspParams.KeyContainerName = "XML_DSIG_RSA_KEY"; RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams); SignXml(this.DocXML, rsaKey); this.DocXML.Save(this.DocXML.Name); rTxtXML.Text = ""; rTxtXML.Text = this.DocXML.OuterXml; } catch (Exception err) { Console.WriteLine(err.Message); } } public static void SignXml(XmlDocument xmlDoc, RSA rsaKey) { if (xmlDoc == null) throw new ArgumentException("xmlDoc"); if (rsaKey == null) throw new ArgumentException("rsaKey"); SignedXml signedXml = new SignedXml(xmlDoc); signedXml.SigningKey = rsaKey; Reference reference = new Reference(); reference.Uri = ""; XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(); reference.AddTransform(env); signedXml.AddReference(reference); signedXml.ComputeSignature(); XmlElement xmlDigitalSignature = signedXml.GetXml(); xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true)); } }

    Cuando ejecuto este programa me muestra en el richtextbox el archivo xml con el nodo que le agrega de la firma. Pero no se guarda nada (creo) porque después lo abro y ya desapareció el nodo que le habia agregado. 
    Hice otra aplicacion para verificar la firma y me dice que no se pudo verificar la firma (del xml que supuestamente fué firmado).
    ¿que falta aquí?

    Gracias desde ya.

    • Editado AntiWork miércoles, 9 de enero de 2019 13:14
    miércoles, 9 de enero de 2019 13:11

Respuestas

  • Hola, 

    verifica que tanto cuando abres el document con

    DocXML.Load(fd.FileName);

    como cuando haces el guardado con 

    this.DocXML.Save(this.DocXML.Name);
     La ruta sea la misma. Me da que al usar this.DocXML.Save(this.DocXML.Name); te lo está guardando en la ruta del programa

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    miércoles, 9 de enero de 2019 15:38
    Moderador

Todas las respuestas

  • Hola, 

    verifica que tanto cuando abres el document con

    DocXML.Load(fd.FileName);

    como cuando haces el guardado con 

    this.DocXML.Save(this.DocXML.Name);
     La ruta sea la misma. Me da que al usar this.DocXML.Save(this.DocXML.Name); te lo está guardando en la ruta del programa

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    miércoles, 9 de enero de 2019 15:38
    Moderador
  • Tenés razon, Lo cambié y funcionó perfecto. Asi quedó:

    this.DocXML.Save(fd.FileName);

    Muchas gracias.

    Saludos

    miércoles, 9 de enero de 2019 16:44
  • Yo ya te marqué la respuesta, pero sale como que vos mismo la marcaste. No se, no entiendo como funciona eso. Si tengo que marcarla de nuevo avisame.

    Saludos

    miércoles, 9 de enero de 2019 17:49