Provjera potpisa

Nov 15, 2012 at 8:55 AM

Pozdrav ekipi i veliko hvala na dosadašnjem radu.

Trebao bih pomoć oko provjere digitalnog potpisa odgovora koji šalje CIS. Kako ste vi riješili taj problem, jer meni uvijek vrati false tj. da provjera nije prošla.

Jeli u planu dodavanja te opcije u neku sljedeću verziju FiskalizacijaDEV projekta?

Coordinator
Nov 16, 2012 at 7:09 AM
Edited Nov 16, 2012 at 7:10 AM

Issue je ovdje, probat ćemo to srediti u slijedećoj verziji: http://fiskalizacija.codeplex.com/workitem/671

Nov 16, 2012 at 7:55 AM

@LostInCity, evo tri hinta :

 

//Trust all certificates
System.Net.ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);

// trust sender
System.Net.ServicePointManager.ServerCertificateValidationCallback
                = ((sender, cert, chain, errors) => cert.Subject.Contains("APIS"));

// delegiraj svoju metodu
System.Net.ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);

 

 

Nov 16, 2012 at 8:19 AM
Edited Nov 16, 2012 at 8:25 AM

A sorry, sada vidim da si pitao za digitalni potpis a ne za certifikat. 

Primjer za provjeru imaš npr. ovdje :

http://msdn.microsoft.com/en-us/library/ms229950.aspx

Nov 16, 2012 at 10:36 AM

Vidio sam taj primjer, ali problem je u tome da mi provjera vraća true za XML koji šaljem CIS-u (tako da pretpostavljam da je sam postupak u redu), ali vraća false kod provjere XML-a koji dobijem od CIS-a.

Nov 16, 2012 at 12:50 PM

A čiji ključ koristiš za njihov XML?

Nov 16, 2012 at 1:01 PM

Probao sam i sa fiskalcistest instaliranim na moje računalo i sa fiskalcistest koji se nalazi unutar XML odgovora. U oba slučaja provjera vraća false

Nov 17, 2012 at 11:22 AM
Edited Nov 17, 2012 at 11:37 PM

Evo moje metode za validaciju koja uredno radi. 

Dakle, certifikat preuzimam iz primljenog CISovog odgovora :

 

        // Verificiraj Signature primljenog XmlDocument objekta  
        public Boolean VerifyXmlDoc(XmlDocument xmlDoc)
        {
            // Provjeri argument
            if (null == xmlDoc)
                throw new ArgumentNullException("xmlDoc u VerifyXmlDoc");
 
            //SkladisteFunkcija.SaveXmlToFile(xmlDoc, "check-xmlDocInVerifyXmlDocMethod.xml", true);

            // Kreiraj novi SignedXml objekt i dostavi mu xmlDoc
            SignedXml potpisaniXml = new System.Security.Cryptography.Xml.SignedXml(xmlDoc);

            // Pronadji "Signature" nod(ove) i kreiraj XmlNodeList objekt
            XmlNodeList signatureNodeList = xmlDoc.GetElementsByTagName("Signature");

            if (signatureNodeList.Count <= 0)
            {
                throw new CryptographicException("Verifikacija nije uspjela: U primljenom dokumentu nije pronadjen digitalni potpis.");
            }

            // Ucitaj nod u SignedXml objekt
            potpisaniXml.LoadXml((XmlElement)signatureNodeList[0]);

            // preuzmi dostavljeni certifikat
            X509Certificate2 certificate = null;
            foreach (KeyInfoClause clause in potpisaniXml.KeyInfo)
            {
                if (clause is KeyInfoX509Data)
                {
                    if (((KeyInfoX509Data)clause).Certificates.Count > 0)
                    {
                        certificate = (X509Certificate2)((KeyInfoX509Data)clause).Certificates[0];
                    }
                }
            }
            if (certificate == null)
            {
                throw new Exception("U primljenom XMLu nema certifikata.");
            }

            // Provjeri Signature i vrati bool rezultat
            Boolean reza = potpisaniXml.CheckSignature(certificate, true);
            return reza;

        }
        /// <summary>
        ///  KRAJ verifikacije XMLa
        /// </summary>
        /// 

Edit :
provjeri i ovo : http://fiskalizacija.codeplex.com/discussions/403580

Nov 19, 2012 at 7:11 AM
mladenbabic wrote:

Edit :
provjeri i ovo : http://fiskalizacija.codeplex.com/discussions/403580

Svaka čast majstore, radi odlično :-)

Nov 28, 2012 at 2:49 PM

Da li netko zna zašto ova metoda ne radi ukoliko se target framework projekta promjeni na .NET 4 ili .NET 4.5? Naime, rezultat je false. Kada je target framework 2,3 ili 3.5 uredno se vrati true

Dec 12, 2012 at 11:24 AM

U mom čudnom jeziku (Windev) ovo baš i ne funkcionira :(

Zapeo na ovoj liniji

            // Ucitaj nod u SignedXml objekt
            potpisaniXml.LoadXml((XmlElement)signatureNodeList[0]);
Šta god probao ili javlja syntax error ili runtime error.

Jel ima šta jednostavnije ?

Kod:
potpisanixml is System.Security.Cryptography.Xml.SignedXml dynamic
potpisanixml=dok.get_InnerXml()
signaturenodelist is XmlNodeList dynamic
signaturenodelist = dok.GetElementsByTagName("Signature")
potpisanixml:LoadXml(signaturenodelist.item(0).XmlElement)

Greška:
Error returned by .NET Framework:
System.TypeLoadException: Could not load type 'System.Xml.XmlElement' from assembly 'wd170net2, Version=17.0.0.1, Culture=neutral, PublicKeyToken=4173916b013faa00'.
   at System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
   at System.RuntimeType.PrivateGetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
   at System.Type.GetType(String typeName, Boolean throwOnError)
   at CDotNetType.s_GetType(Char* pszTypeName, CXError* pclError
Dec 12, 2012 at 2:40 PM
Edited Dec 12, 2012 at 2:59 PM

Doduše, koristim xmlsec lib i Delphi, no valdiacija CIS odgovora certifikatom iz x509 čvora u xml-u. kao i validacija fiskalcistest certifikatom mi ne prolaze (3ECB1071) no zato mi prolazi validacija DEMO certifikatom (3EC9FD21). Nije mi baš jasno zašto...? Tada mi za produkciju neće prolaziti provjera sa fiskalcis (3F234332) nego vjerojatno rdc.fina.hr ? 

Očito sam se zbunio ovom novom 1.2 dokumentacijom :)

Potpisavatelj test odgovora je fiskalcistest, a produkcijskog odgovora fiskalcis.

U tom slučaju provjeru radim tako što mi je trusted root ca za test : demo tj. demo.fina.hr , a produkcijski će valjda biti rdc.fina.hr. Ovako je barem radilo i bilo logično, no valjda sam zabrijao zbog ovih potpisnih fiskalcis certifikata.

Dec 14, 2012 at 12:03 PM
partyelite wrote:

Da li netko zna zašto ova metoda ne radi ukoliko se target framework projekta promjeni na .NET 4 ili .NET 4.5? Naime, rezultat je false. Kada je target framework 2,3 ili 3.5 uredno se vrati true


Hm, ja ga nikako ne mogu natjerati da vrati true. Pratim sve upute, ali ne ide, uporno vraća false. Moj .NET framework je 4.0, ima li još netko problema na tom frameworku ili ja nešto krivo radim? help!

Mar 14, 2013 at 9:28 AM
Imam sljedeči problem...

WebService zovem ovako:
            PoreznaWS.FiskalizacijaService soapService = new PoreznaWS.FiskalizacijaService();
            soapService.Url = test_url;
            soapService.ClientCertificates.Add(userCertificate);

            //SERVICE CALL
            PoreznaWS.RacunOdgovor odgovor = soapService.racuni(racun_zahtjev);
Problem je u odgovoru jer mi funkcija vrati object a ne xml string...
znači... ne znam, kakav je string kojeg web_service šalje (prjimer: <tns:RacunOdgovor> ili <f73:RacunOdgovor> )

Zanima me, treba li provjera digitalnog potpisa?
Dali zbog ove komande: soapService.ClientCertificates.Add(userCertificate); nitko nemože ulazit u connection?
Mar 14, 2013 at 9:50 AM
Edited Mar 14, 2013 at 9:52 AM
Double post...
Mar 21, 2013 at 11:47 AM
Provjerio sam na RaverusFiskalizacjaDEV primjeru
// Provjeri Signature i vrati bool rezultat
        Boolean reza = potpisaniXml.CheckSignature(certificate, true);
        return reza;
Ako je .net 4 onda je i u tom primjeru false uvijek. ako je .net 2 (kako je izvorno postavljeno) onda radi ispravno.
Imam isti problem i isto sam zakljucio, .net 4 uvijek javlja false.
May 21, 2013 at 3:13 PM
Jel netko zna koje je rješenje ovog gore problema?
Imam skinutu zadnju verziju, no problem je i dalje prisutan.


Hvala unaprijed, pozdrav
May 4, 2015 at 4:21 PM
Pozdrav,

meni je ovo riješilo problem s .NET 4.0 http://stackoverflow.com/questions/13632630/signedxml-checksignature-fails-in-net-4-but-it-works-in-net-3-5-3-or-2

Funkcija ProvjeriPotpis sada izgleda ovako:
        public static Boolean ProvjeriPotpis(XmlDocument dokument)
        {
            // Prema sugestiji mladenbabic (http://fiskalizacija.codeplex.com/discussions/403288) 

            // Provjeri argument
            if (dokument == null)
                throw new ArgumentNullException();

            CryptoConfig.AddAlgorithm(typeof(MyXmlDsigC14NTransform), "http://www.w3.org/TR/2001/REC-xml-c14n-20010315");
            
            MyXmlDsigC14NTransform.document = dokument;

// Kreiraj novi SignedXml objekt i dostavi mu xmlDoc
            SignedXml potpisaniXml = new SignedXml(dokument);

            // Pronadji "Signature" nod(ove) i kreiraj XmlNodeList objekt
            XmlNodeList signatureNodeList = dokument.GetElementsByTagName("Signature");

            if (signatureNodeList.Count <= 0)
            {
                Trace.TraceError("Verifikacija nije uspjela: U primljenom dokumentu nije pronadjen digitalni potpis.");
                throw new CryptographicException("Verifikacija nije uspjela: U primljenom dokumentu nije pronadjen digitalni potpis.");
            }

            // Ucitaj nod u SignedXml objekt
            potpisaniXml.LoadXml((XmlElement)signatureNodeList[0]);

            // preuzmi dostavljeni certifikat
            X509Certificate2 certificate = null;
            foreach (KeyInfoClause clause in potpisaniXml.KeyInfo)
            {
                if (clause is KeyInfoX509Data)
                {
                    if (((KeyInfoX509Data)clause).Certificates.Count > 0)
                    {
                        certificate = (X509Certificate2)((KeyInfoX509Data)clause).Certificates[0];
                    }
                }
            }
            if (certificate == null)
            {
                Trace.TraceError("U primljenom XMLu nema certifikata.");
                throw new Exception("U primljenom XMLu nema certifikata.");
            }

            // Provjeri Signature i vrati bool rezultat
            Boolean reza = potpisaniXml.CheckSignature(certificate, true);
            return reza;

        }
I na kraju fajla sam dodao klasu s linka:
public class MyXmlDsigC14NTransform: XmlDsigC14NTransform {
  static XmlDocument _document;
  public static XmlDocument document {
    set {
      _document = value;
    }
  }

  public MyXmlDsigC14NTransform() {}

  public override Object GetOutput() {
    return base.GetOutput();
  }

  public override void LoadInnerXml(XmlNodeList nodeList) {
    base.LoadInnerXml(nodeList);
  }

  protected override XmlNodeList GetInnerXml() {
    XmlNodeList nodeList = base.GetInnerXml();
    return nodeList;
  }

  public XmlElement GetXml() {
    return base.GetXml();
  }

  public override void LoadInput(Object obj) {
    int n;
    bool fDefaultNS = true;

    XmlElement element = ((XmlDocument) obj).DocumentElement;

    if (element.Name.Contains("SignedInfo")) {
      XmlNodeList DigestValue = element.GetElementsByTagName("DigestValue", element.NamespaceURI);
      string strHash = DigestValue[0].InnerText;
      XmlNodeList nodeList = _document.GetElementsByTagName(element.Name);

      for (n = 0; n < nodeList.Count; n++) {
        XmlNodeList DigestValue2 = ((XmlElement) nodeList[n]).GetElementsByTagName("DigestValue", ((XmlElement) nodeList[n]).NamespaceURI);
        string strHash2 = DigestValue2[0].InnerText;
        if (strHash == strHash2) break;
      }

      XmlNode node = nodeList[n];

      while (node.ParentNode != null) {
        XmlAttributeCollection attrColl = node.ParentNode.Attributes;
        if (attrColl != null) {
          for (n = 0; n < attrColl.Count; n++) {
            XmlAttribute attr = attrColl[n];
            if (attr.Prefix == "xmlns") {
              element.SetAttribute(attr.Name, attr.Value);
            } else if (attr.Name == "xmlns") {
              if (fDefaultNS) {
                element.SetAttribute(attr.Name, attr.Value);
                fDefaultNS = false;
              }
            }
          }
        }

        node = node.ParentNode;
      }
    }

    base.LoadInput(obj);
  }
}
Pozdrav,
Mario
Aug 22, 2015 at 9:37 PM
Pozdrav!

Isprobao sam sve kombinacije iz odgovora u ovoj temi, kao i dosta toga sa StackOverflowa i ostalih foruma.
Naravno, ništa mi nije pomoglo pa se javljam ovdje.

Radim svoj fiskalizacijski modul u .Net 3.5. Pomoću wsdl.exe sam izgenerirao proxy klasu FiskalizacijaService.cs. Slanje zahtjeva vrši se pozivom metode "racuni(RacunZahtjev)" nad instanciranom klasom FiskalizacijaService. Kao response se dobije objekt RacunOdgovor (za razliku od XML response-a koji dolazi u Raverusovom modulu).

Metoda "racuni":
[SoapDocumentMethod("http://e-porezna.porezna-uprava.hr/fiskalizacija/2012/services/FiskalizacijaServi" +
            "ce/racuni", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Bare)]
        [return: XmlElement("RacunOdgovor", Namespace = "http://www.apis-it.hr/fin/2012/types/f73")]
        public RacunOdgovor racuni([XmlElement(Namespace = "http://www.apis-it.hr/fin/2012/types/f73")] RacunZahtjev RacunZahtjev)
        {
            object[] results = this.Invoke("racuni", new object[] {
                        RacunZahtjev});
            return ((RacunOdgovor)(results[0]));
        }
A ovo je RacunOdgovor:
    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.18020")]
    [Serializable()]
    [DebuggerStepThrough()]
    [DesignerCategory("code")]
    [XmlType(AnonymousType = true, Namespace = "http://www.apis-it.hr/fin/2012/types/f73")]
    public partial class RacunOdgovor
    {

        private ZaglavljeOdgovorType zaglavljeField;

        private string jirField;

        private GreskaType[] greskeField;

        private SignatureType signatureField;

        private string idField;

        /// <remarks/>
        public ZaglavljeOdgovorType Zaglavlje
        {
            get
            {
                return this.zaglavljeField;
            }
            set
            {
                this.zaglavljeField = value;
            }
        }

        /// <remarks/>
        public string Jir
        {
            get
            {
                return this.jirField;
            }
            set
            {
                this.jirField = value;
            }
        }

        /// <remarks/>
        [XmlArrayItem("Greska", IsNullable = false)]
        public GreskaType[] Greske
        {
            get
            {
                return this.greskeField;
            }
            set
            {
                this.greskeField = value;
            }
        }

        /// <remarks/>
        [XmlElement(Namespace = "http://www.w3.org/2000/09/xmldsig#")]
        public SignatureType Signature
        {
            get
            {
                return this.signatureField;
            }
            set
            {
                this.signatureField = value;
            }
        }

        /// <remarks/>
        [XmlAttribute()]
        public string Id
        {
            get
            {
                return this.idField;
            }
            set
            {
                this.idField = value;
            }
        }
    }
Sve dobro prođe, dobijem JIR, nema grešaka, ali prokleti CheckSignature UVIJEK vraća false.
Nakon masu isprobanih kombinacija, fokusirao sam se na samu serijalizaciju spomenutog objekta RacunOdgovor.

Metoda za provjeru potpisa:
                private bool CheckSignature(object response)
        {
            var serRes = response.Serialize();          
            var doc = new XmlDocument();
            doc.PreserveWhitespace = true;
            doc.LoadXml(serRes);

            var signedXml = new SignedXml(doc);

            var listSignatureNodes = doc.GetElementsByTagName("Signature");
            if (listSignatureNodes == null || listSignatureNodes.Count != 1)
                return false;

            var signatureNode = listSignatureNodes[0] as XmlElement;
            signedXml.LoadXml(signatureNode);

            X509Certificate2 certificate = null;
            foreach (KeyInfoClause clause in signedXml.KeyInfo)
            {
                if (!(clause is KeyInfoX509Data))
                    continue;

                var keyInfoData = clause as KeyInfoX509Data;
                if (keyInfoData != null && keyInfoData.Certificates != null && keyInfoData.Certificates.Count == 1)
                {
                    certificate = (clause as KeyInfoX509Data).Certificates[0] as X509Certificate2;
                    break;
                }
            }

            return signedXml.CheckSignature(certificate, verifySignatureOnly: true);
        }
Extension metoda za serijalizaciju objekta tipa RacunOdgovor:
               public static string Serialize<T>(this T o) where T : class
        {
            using (var ms = new MemoryStream())
            {
                // Set namespace to root element
                var root = new XmlRootAttribute { Namespace = "http://www.apis-it.hr/fin/2012/types/f73", IsNullable = false };
                var ser = new XmlSerializer(o.GetType(), root);
                ser.Serialize(ms, o);

                return Encoding.UTF8.GetString(ms.ToArray());
            }
        }
Rezultat serijalizacije koji se učitava u XML, zatim u SignedXML i na kraju se provjerava potpis sa CheckSignature:
<?xml version="1.0"?>
<RacunOdgovor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Id="G0x7fce58f988f8-4D" xmlns="http://www.apis-it.hr/fin/2012/types/f73">
  <Zaglavlje>
    <IdPoruke>f98f8a43-cfe8-4754-8f21-9b7b9d822200</IdPoruke>
    <DatumVrijeme>22.08.2015T22:20:16</DatumVrijeme>
  </Zaglavlje>
  <Jir>9e8a6966-aa9a-403c-91f8-6c4f508b8524</Jir>
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
      <Reference URI="#G0x7fce58f988f8-4D">
        <Transforms>
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
          <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
        </Transforms>
        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
        <DigestValue>O+rLF/VXm8HiqXqnCCA87ZW9+O8=</DigestValue>
      </Reference>
    </SignedInfo>
    <SignatureValue>WUgS8vApAjGAPa/pvv+jBWunY5tRXLooTKG0NkLXtLVsafogqph+BLWB3hsB6eOezTh6EmcBRzxufqJXiPFAHJgNhKC9rJ7t0PS6nQqfypuKumSTHMDBwjYhv5CEadl64X1RzwawC98spPk5lxEDWnppIr05edewgLjZbv7gq14UIaGZ0VeFhfOOW4RWm7oz6DYdINGVfQfAICtJbedkop59Fug1DC6eRBJactb1ctrjr8UZxsDhD6M/qkiUG+D2hlH6jfCT1asduLDRdSONpVUs1uxuSh+6sKr3FwaSE3265l9E4kBuZfbUSChDN6n1Kb8xuYQ1y86s1XnigKa0EA==</SignatureValue>
    <KeyInfo>
      <X509Data>
        <X509Certificate>MIIEqjCCA5KgAwIBAgIEPsubJjANBgkqhkiG9w0BAQUFADArMQswCQYDVQQGEwJIUjENMAsGA1UEChMERklOQTENMAsGA1UECxMEREVNTzAeFw0xNDA5MjYwOTIyMDZaFw0xNjA5MjYwOTUyMDZaMF0xCzAJBgNVBAYTAkhSMSUwIwYDVQQKExxBUElTIElUIEQuTy5PLiBIUjAyOTk0NjUwMTk5MQ8wDQYDVQQHEwZaQUdSRUIxFjAUBgNVBAMTDWZpc2thbGNpc3Rlc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC7fFbQwTVfGzw8H8FSRPFVlkMNxd/tgaGMNgqw3PIM48r+iBG2or6a56SmlXjweP0odi8VoeJavyA9f31jaAAMFnrpggOJnJfgKeSF8dMA5fR8mqd5+l6R6WTsxaDqodQ/hzVzLXWLvTVVAVKmLyTvwdD9fWLMqjVciUaO4b9hRYTJzbVPF3gr20+L1hkPMM8nn9XmXebuwVxRL/r5pjYnDOZ5OrQUlL9NU3o++ZZzMOH5gBIxPdWxBcWOMGDS8seZkDc6etQwgVad6eIXVxRV89umlslQJfNwZyDCQa+v6hVTCN3h0N7K13WGsCnxrHke7vOtWe8h+tpezXtgbtbAgMBAAGjggGiMIIBnjAOBgNVHQ8BAf8EBAMCBaAwQgYDVR0gBDswOTA3BgkrfIhQBR8FBAIwKjAoBggrBgEFBQcCARYcaHR0cDovL2RlbW8tcGtpLmZpbmEuaHIvY3BzLzCBzwYDVR0fBIHHMIHEMEOgQaA/pD0wOzELMAkGA1UEBhMCSFIxDTALBgNVBAoTBEZJTkExDTALBgNVBAsTBERFTU8xDjAMBgNVBAMTBUNSTDEzMH2ge6B5hk9sZGFwOi8vZGVtby1sZGFwLmZpbmEuaHIvb3U9REVNTyxvPUZJTkEsYz1IUj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0JTNCYmluYXJ5hiZodHRwOi8vZGVtby1wa2kuZmluYS5oci9jcmwvZGVtb2NhLmNybDArBgNVHRAEJDAigA8yMDE0MDkyNjA5MjIwNlqBDzIwMTYwOTI2MDk1MjA2WjAfBgNVHSMEGDAWgBR6YCOOSJ0ya6TlLd24WbSU/EJinjAdBgNVHQ4EFgQUDLFtT4WUMq2xNuDDCTO05+3axjUwCQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAAgqY82RzzOOtniqzxIFUWO3JwhIbjHhzLXS0wEvC/kuGE0EQxR0HB7AR5CryIeuY4C9M8IdtgrysXrdlnK5na+KJM/q5QyvffEvNhZPavU5EOVEGLlOndfkRhuagMIDEkLzX+kOkWARy7JE61/+4gNKy4r4XUOsEaWM/KVEOihukuSGgu9geR/FseE8ZK9MlC0xvo8BWdtZVxGYECCOf84Lgup1PbsBX8Supqr4pGnc2sSe8juNhuFJmqM+4SPO9JlOs8GsYIG1KfRsSiC09FyybGWgnF9TddglzOqanxD2CcWeGp+Q0nlIJhgiTQH4kxWReJ3e/aF5yIkr8AG2lcg==</X509Certificate>
        <X509IssuerSerial>
          <X509IssuerName>OU=DEMO, O=FINA, C=HR</X509IssuerName>
          <X509SerialNumber>1053530918</X509SerialNumber>
        </X509IssuerSerial>
      </X509Data>
    </KeyInfo>
  </Signature>
</RacunOdgovor>
Moje pitanje bi ovdje glasilo:
Jesam li uopće dobro serijalizirao vraćeni objekt proxy klase nastale generiranjem iz wsdl-a i xsd-a?
I kako bi opće trebao izgledati "dobar" XML kojeg se učitava u SignedXml sa svrhom provjere potpisa?

Probao sam učitati i čisti SOAP response (izvučen iz Fiddlera) u Signed XML, ali isto mi vraća false...
Nov 16 at 8:37 AM
Pozdrav,

zahvaljujem na dosadašnjim odličnim postovima.
Zamolio bih za kratko pojašnjenje oko korištene metode "potpisaniXml.CheckSignature(certificate, true)" za provjeru potpisa.

Koliko sam uspio zaključiti spomenuta metoda uspoređuje potpis od javnog ključa certifikata koji se vrati sa odgovorom web servisa sa potpisom odgovora web servisa. Ukoliko javni ključ ne odgovara privatnom ključu, klijent nije niti u mogućnosti pročitati odgovor web servisa.

hvala