Rješenje provjera potpisa

Oct 31 at 8:37 PM
Da bi se provjerio potpis u dobivenom odgovoru u verziji Frameworka 4.5 potrebno je dodati priloženu clasu u projekt i ove dvije linije koda u funkciji ProvjeriPotpis.

Razlog što bez toga ne radi je u drugačijem pristupu u odnosu na Framework 2.0
                ' Ovo je dodano da radi ispravno provjeru potpisa
                ' za 4.5
                CryptoConfig.AddAlgorithm(GetType(MyXmlDsigC14NTransform), "http://www.w3.org/TR/2001/REC-xml-c14n-20010315")
                MyXmlDsigC14NTransform.document = dokument
Moja opažanja vezana na provjeru potpisa:
  1. Funkcija ProvjeriPotpis iz Raverus.Fiskalizacija vadi certifikat iz dobivenog XML odgovora te provjerava potpis, to je isto kao i da se ne provjerava potpis jer se potpis i certifikat nalaze istom file-u, te je moguće da "marsovci" vrate potpisan XML.
  2. Ako se želi koristiti fiskalcis ( fiskalcistest za testiranje ) certifikat onda je potrebno isti instalirati na računalo ili izvaditi iz filea pomoću funkcije te tako provjeriti potpis. Kod ovog načina svake dvije godine je potrebno zamjeniti fiskalcis certifikat na točno određeni dan kod svakog korisnika.
Osobno provjeravam potpis, ali ne prekidam fiskalizaciju ao dobijem JIR, nego u log file zabilježim ako potpis nije ispravan tako da mogu provjeriti što se desilo.
Do sada sa TLS 1.0 i od nedavno sa TLS 1.2 nisam imao zabilježen slučaj sa neipravnim potpisom.

Kompletnu fiskalizaciju radim preko web servisa od početka i sve radi bez problema.
' Ako se vadi iz file-a
certificate = DohvatiCertifikat(path & "fiskalcistest.cer", "")

' Ako se vadi iz store-a
certificate = DohvatiCertifikat("fiskalcistest", StoreLocation.LocalMachine, StoreName.Root)
Ovo je clasa potrebna da izvadi potpis iz xml-a
Public Class MyXmlDsigC14NTransform
    Inherits XmlDsigC14NTransform
    Shared _document As XmlDocument
    Public Shared WriteOnly Property document() As XmlDocument
        Set(ByVal value As XmlDocument)
            _document = value
        End Set
    End Property

    Public Sub New()
    End Sub

    Public Overrides Function GetOutput() As [Object]
        Return MyBase.GetOutput()
    End Function

    Public Overrides Sub LoadInnerXml(ByVal nodeList As XmlNodeList)
        MyBase.LoadInnerXml(nodeList)
    End Sub

    Protected Overrides Function GetInnerXml() As XmlNodeList
        Dim nodeList As XmlNodeList = MyBase.GetInnerXml()
        Return nodeList
    End Function

    Public Overloads Function GetXml() As XmlElement
        Return MyBase.GetXml()
    End Function

    Public Overrides Sub LoadInput(ByVal obj As [Object])
        Dim n As Integer
        Dim fDefaultNS As Boolean = True

        Dim element As XmlElement = DirectCast(obj, XmlDocument).DocumentElement

        If element.Name.Contains("SignedInfo") Then
            Dim DigestValue As XmlNodeList = element.GetElementsByTagName("DigestValue", element.NamespaceURI)
            Dim strHash As String = DigestValue(0).InnerText
            Dim nodeList As XmlNodeList = _document.GetElementsByTagName(element.Name)

            For n = 0 To nodeList.Count - 1
                Dim DigestValue2 As XmlNodeList = DirectCast(nodeList(n), XmlElement).GetElementsByTagName("DigestValue", DirectCast(nodeList(n), XmlElement).NamespaceURI)
                Dim strHash2 As String = DigestValue2(0).InnerText
                If strHash = strHash2 Then
                    Exit For
                End If
            Next

            Dim node As XmlNode = nodeList(n)

            While node.ParentNode IsNot Nothing
                Dim attrColl As XmlAttributeCollection = node.ParentNode.Attributes
                If attrColl IsNot Nothing Then
                    For n = 0 To attrColl.Count - 1
                        Dim attr As XmlAttribute = attrColl(n)
                        If attr.Prefix = "xmlns" Then
                            element.SetAttribute(attr.Name, attr.Value)
                        ElseIf attr.Name = "xmlns" Then
                            If fDefaultNS Then
                                element.SetAttribute(attr.Name, attr.Value)
                                fDefaultNS = False
                            End If
                        End If
                    Next
                End If

                node = node.ParentNode
            End While
        End If

        MyBase.LoadInput(obj)
    End Sub
End Class
Coordinator
Nov 2 at 9:41 AM
Hvala na sugestiji, otvorio sam novi work item: https://fiskalizacija.codeplex.com/workitem/1161
Nov 5 at 12:50 PM
unesem kako je u primjeru za provjeru potpisa uvjek dobijem negativno na testnoj okolini

c#
bool potpisTest = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.ProvjeriPotpis(doc);
                if (potpisTest)
                {
                    ASPxLabel20.Text = ASPxLabel20.Text.ToString() + "Provjera potpisa OK";
                }
                else
                {
                    ASPxLabel20.Text = ASPxLabel20.Text.ToString() + "Greška kod provjere potpisa";
                }
i


Molim Vas ako mi tko može pomoći.