» »

E-račun

E-račun

metodp ::

E-račun se pošilja preko spletne banke, kjer ni potrebna prijava s certifikatom. Vsa testiranja so bila OK, pri pravih računih pa pride do zavrnitve, ker v XML kodi ni elektronskega podpisa.
Kako bi elektronski podpis vstavil v XML kodo (primer)?

Lahko kdo pomaga?

SeMiNeSanja ::

S čem pa generiraš tisti XML račun? Načeloma bi moralo že to orodje vstaviti elektronski podpis, tako da zadevo samo še importiraš na banki.

metodp ::

Naredi ga koda v mojem programu - vrstico za vrstico. To deluje, manjka samo podpis. Če bi oddajali preko UJP portala, se baje to doda samo, nisem še preizkusil na kakšnem Prokliku, ki za prijavo potrebuje certifikat. Pri Banki Koper se prijaviš samo s čitalcem in kartico in datoteka se ne podpiše sama od sebe.
Ali drugače povedano: Moj program naredi zip datoteko, ki vsebuje XML račun, ovojnico in PDF račun. Zadeva nima napak po shemi ali vsebini. Ko to elektronsko podpisati? Do danes sem mislil, da to naredi banka, ko datoteko oddaš.

Zgodovina sprememb…

  • spremenilo: metodp ()

dope1337 ::

Si siguren, da v sami shemi ni določeno kje ter v kakšni obliki mora biti elektronski podpis? Če si tak dober, prlimi še link do sheme XML-ja (če-le imaš te pravice). Mogoče še kašen DTD tudi zraven? Ker fora je, da osebno ne poznam protokola, je pa 100% določen iz strani bank (po možnosti celo berljiv).
"Everybody is a genius. But if you judge a fish by its ability to climb a tree
it will live its whole life believing that it is stupid."
-Albert Einstein

sas084 ::

Malo več boš moral povedat v kerem programskem jeziku maš spisan program. Par primerov za XMLDSIG podpise: C# (link, link), Java, C/C++ (XmlSec). Drugače pa tko kot je reku SeMiNeSanja, program ki zgenerira xml bi mogu met funkcijo za podpis.

metodp ::

Clarion. Kakšnih funkcij za podpis ni. Sploh ni kakšne hude podpore za XML, zato ga pišem kot tekstovno datoteko vrstico za vrstico. Za elektronski podpis pa mi je zmanjkalo idej.

mn ::

sas084 je izjavil:

Malo več boš moral povedat v kerem programskem jeziku maš spisan program. Par primerov za XMLDSIG podpise: C# (link, link), Java, C/C++ (XmlSec). Drugače pa tko kot je reku SeMiNeSanja, program ki zgenerira xml bi mogu met funkcijo za podpis.


Imaš prav. E-račun kakor vem je podpisan po XML signature standardu:

http://www.w3.org/TR/xmldsig-core/

metodp ::

Shema za cel eračun je v priročniku: http://www.gzs.si/slo/28209 (priročnik - dopolnjena dokumentacija: točka 4 (str. 20): Digitalni podpis e-računa). Tukaj je nekaj napisano, ampak jaz se iz tega ne znajdem.


dope1337 je izjavil:

Si siguren, da v sami shemi ni določeno kje ter v kakšni obliki mora biti elektronski podpis? Če si tak dober, prlimi še link do sheme XML-ja (če-le imaš te pravice). Mogoče še kašen DTD tudi zraven? Ker fora je, da osebno ne poznam protokola, je pa 100% določen iz strani bank (po možnosti celo berljiv).

Spura ::

Naredit moras xmldsig. So ljudje ze dal primere.

sas084 ::

metodp je izjavil:

Clarion. Kakšnih funkcij za podpis ni. Sploh ni kakšne hude podpore za XML, zato ga pišem kot tekstovno datoteko vrstico za vrstico. Za elektronski podpis pa mi je zmanjkalo idej.

Žal nimam pojma o Clarionu. Če imaš varjanto probaj z Clarion.NET, s tem bi dobil možnost uporabe .NET funkcijonalnosti za XMLDSIG. Tu si lahko pogledaš en primer klienta, ki pošilja podpisane SOAP message na webservis.

mm&r ::

Ali iz Clariona lahko kličeš COM objektov, torej pripraviš podpisovanje v kakšnem drugem okolju in zadevo integriraš.

Sam sem že nekaj časa pripravil eno knjižnjico namensko za podpis e-računov, ki se lahko uporablja preko COM-a ali pa direktno kot .NET knjižnjico, no možno bi jo bilo klicati tudi preko command-line interface-ja.
V kolikor te zanima mi sporoči preko ZS.

Ericssony ::

mn je izjavil:

sas084 je izjavil:

Malo več boš moral povedat v kerem programskem jeziku maš spisan program. Par primerov za XMLDSIG podpise: C# (link, link), Java, C/C++ (XmlSec). Drugače pa tko kot je reku SeMiNeSanja, program ki zgenerira xml bi mogu met funkcijo za podpis.


Imaš prav. E-račun kakor vem je podpisan po XML signature standardu:

http://www.w3.org/TR/xmldsig-core/


Vsi eRačuni, ki se pošiljajo na UJP moraji biti digitalno podpisani.

S tem, da Slovenci ne bi bili Slovenci, če zgoraj omenjenega standarda ne bi priredili po svoje!
Shema, po kateri se preverja digitalni podpis je namreč prirejena tako, da ne omogoča značke
<Transforms>
ki jo zgoraj omenjeni standard seveda omogoča. V dokumentaciji je značka prisotna in razložen njen pomen v sami shemi pa je značka odtranjena.

Tudi ICL ovojnica bi naj bila samo ena - bi naj bila, ker banke so si to spet priredile po svoje.

Ta naš eRačun je ena velika zmešnjava in skrpucalo...

MB_DS ::

Pozdravljeni,
sem nov uporabnik tegale portala, ker nikjer drugje na internetu nisem našel uporabne dokumentacije...

zanima me torej sledeče:
Je kdo uspel pripraviti program, ki generira veljaven elektronski podpis za Eračun, ki se ujema po shemi, ki jo zahteva portal UJPnet?

ker jaz se že kak mesec ukvarjam z zadevo, pripravil sem ogromno podpisov, ki so bili po vseh možnih standardih in shemah veljavni, ko pa sem jih naložil v testno okolje na portalu UJPnet, sem pa dobil odgovor, da je dokument neveljaven...

100% se strnjam s tem kar pravi Ericssony, da so poponoma brezveze zakomplicirali shemo in s tem v bistvu onemogočili uporabo katerekoli generične knjižnice za generiranje Xades podpisa...
(mimogrede, podpis, ki ga zahtevajo je (vsaj približno) XADES-BES. XMLDSIG ni dovolj.)

Če je omenjen podvig komurkoli uspel in bi bil pripravljen deliti svojo programsko kodo, bi mu bil neznansko hvaležen.

Lep pozdrav vsem

Spura ::

Kolikor jst vem je navaden XMLDSIG, dat ga moras pa v taprav element (Signatures).

MB_DS ::

navaden XMLDSig ni dovolj.
Shema predvideva tudi značko
<object>
, ki vsebuje komponente XADES podpisa (ampak ker je to slovenska javna uprava seveda ne vsebuje vseh standardnih komponent XADES...) :)

Chuck Borris ::

Sicer je že več kot eno leto, pa vendar:

UJP sprejme eRačun, ki je podpisan z navadnim XMLDSIG - enveloped (imeti mora tudi element
<Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /></Transforms>
)
Sedaj pa se je pri nas prvič pojavila situacija, ko "gre" eRačun izven sistema UJP na eno izmed bank.
Ta banka pa seveda preverja xml tudi glede na eSlog shemo in gladko zarne račun. (pač da, tako kot je napisal MD_DS potreben je XaDES podpis).

Sedaj pa problem. V Visual Studiu mi tega nikakor ne uspe sproducirat...
Če je slučajno komu uspelo, bi bil zelo hvaležen za kakšen namig oz. primer.

zhigatsey ::

public static string Podpisi(X509Certificate2 cert, string xml)
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.PreserveWhitespace = false;
    xmlDoc.LoadXml(xml);
 
    var signedXml = new SignedXml(xmlDoc);
    signedXml.Signature.Id = "SignatureId";
 
    signedXml.SignedInfo.CanonicalizationMethod = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
    signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2000/09/xmldsig#rsa-sha1";
 
    Reference reference = new Reference();
    reference.Type = "http://www.gzs.si/shemas/eslog/racun/1.5#Racun";
    reference.Uri = "#data";
    reference.DigestMethod = "http://www.w3.org/2000/09/xmldsig#sha1";
    signedXml.AddReference(reference);
 
    signedXml.SigningKey = cert.PrivateKey;
    KeyInfo keyInfo = new KeyInfo();
    KeyInfoX509Data keyInfoX509Data = new KeyInfoX509Data(cert, X509IncludeOption.ExcludeRoot);
    keyInfo.AddClause(keyInfoX509Data);
    signedXml.KeyInfo = keyInfo;
 
    string URI = "http://uri.etsi.org/01903/v1.1.1#";
 
    var qualifyingPropertiesNode = xmlDoc.CreateElement("xds", "QualifyingProperties", URI);
    qualifyingPropertiesNode.SetAttribute("Target", "#SignatureId");
 
    var signedPropertiesNode = xmlDoc.CreateElement("xds", "SignedProperties", URI);
    signedPropertiesNode.SetAttribute("Id", "SignedPropertiesId");
 
    var signedSignaturePropertiesNode = xmlDoc.CreateElement("xds", "SignedSignatureProperties", URI);
 
    var signingTimeNode = xmlDoc.CreateElement("xds", "SigningTime", URI);
    signingTimeNode.InnerText = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"); //2011-09-05T09:11:24.268Z
    signedSignaturePropertiesNode.AppendChild(signingTimeNode);
 
    SHA1 cryptoServiceProvider = new SHA1CryptoServiceProvider();
    byte[] sha1 = cryptoServiceProvider.ComputeHash(cert.RawData);
 
    var signingCertificateNode = xmlDoc.CreateElement("xds", "SigningCertificate", URI);
    var certNode = xmlDoc.CreateElement("xds", "Cert", URI);
    var certDigestNode = xmlDoc.CreateElement("xds", "CertDigest", URI);
    var digestMethodNode = xmlDoc.CreateElement("xds", "DigestMethod", URI);
    digestMethodNode.SetAttribute("Algorithm", SignedXml.XmlDsigSHA1Url);
    var digestValueNode = xmlDoc.CreateElement("xds", "DigestValue", URI);
    digestValueNode.InnerText = Convert.ToBase64String(sha1);
    certDigestNode.AppendChild(digestMethodNode);
    certDigestNode.AppendChild(digestValueNode);
    certNode.AppendChild(certDigestNode);
 
    var issuerSerialNode = xmlDoc.CreateElement("xds", "IssuerSerial", URI);
    var x509IssuerNameNode = xmlDoc.CreateElement("ds", "X509IssuerName", "http://www.w3.org/2000/09/xmldsig#");
    x509IssuerNameNode.InnerText = cert.IssuerName.Name;
    var x509SerialNumberNode = xmlDoc.CreateElement("ds", "X509SerialNumber", "http://www.w3.org/2000/09/xmldsig#");
 
    x509SerialNumberNode.InnerText = Convert.ToInt32(cert.SerialNumber, 16).ToString();
    issuerSerialNode.AppendChild(x509IssuerNameNode);
    issuerSerialNode.AppendChild(x509SerialNumberNode);
    certNode.AppendChild(issuerSerialNode);
 
    signingCertificateNode.AppendChild(certNode);
 
    var signaturePolicyIdentifierNode = xmlDoc.CreateElement("xds", "SignaturePolicyIdentifier", URI);
    var signaturePolicyImpliedNode = xmlDoc.CreateElement("xds", "SignaturePolicyImplied", URI);
    signaturePolicyIdentifierNode.AppendChild(signaturePolicyImpliedNode);
 
    signedSignaturePropertiesNode.AppendChild(signingCertificateNode);
    signedSignaturePropertiesNode.AppendChild(signaturePolicyIdentifierNode);
 
    signedPropertiesNode.AppendChild(signedSignaturePropertiesNode);
    qualifyingPropertiesNode.AppendChild(signedPropertiesNode);
 
    var dataObject = new DataObject();
    dataObject.Data = qualifyingPropertiesNode.SelectNodes(".");
    signedXml.AddObject(dataObject);
 
    signedXml.ComputeSignature();
 
    XmlElement xmlDigitalSignature = signedXml.GetXml();
    xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
 
    if (!signedXml.CheckSignature())
    {
        throw new Exception("Digitalni podpis eRačuna ni veljaven!");
    }
 
    return xmlDoc.OuterXml;
}

prtenjam ::

Na GitHub-u imaš knjižnico: MPrtenjak/MNetESlog
Matjaž Prtenjak
https://mnet.si

pmetod ::

A obstaja kakšna odprtokodna XSLT datoteka za vizualizacijo e-računa - verzija 1.6, 1.61 (iz xml v html)? Kakšen link?

zhigatsey ::

Kaj pa če vprašaš SETCCE za soglasje?

https://www.gzs.si/e-poslovanje/dokumen...

pmetod ::

A je to kdo poizkusil? Kakšen je bil odgovor?

ivanhoe5x ::

Ima mogoče kdo kodo za podpis xml-a e računa v PHP?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Davčne blagajne (strani: 1 2 3 424 25 26 27 )

Oddelek: Programiranje
1344317156 (57159) Macketina
»

[.NET] XML podpis

Oddelek: Programiranje
142481 (2158) ibolkacener3
»

[Java]Shranjevanje/Branje nastavitev za povezavo z podatkovno bazo

Oddelek: Programiranje
192381 (2155) KernelPanic
»

parsanje podatkov iz strani

Oddelek: Programiranje
131852 (1647) commissar
»

[C#] Simobilov Glasnik

Oddelek: Programiranje
134150 (1230) Mrch

Več podobnih tem