Natrag   Forum.hr > Informatička tehnologija > Za napredne korisnike > Programiranje

Programiranje Za programere i one koji to žele postati ...

Odgovor
 
Tematski alati Opcije prikaza
Old 17.10.2012., 17:32   #81
Quote:
Kruno M kaže: Pogledaj post
Može pomoć oko SOAP-a i dobijanja responsa, kod ako imaš?

I šta si koristio za potpisivanje XML-a?

Hvala
XMLSec (command line)
http://www.aleksey.com/xmlsec/

Skini sve fileove koje imaš u download-u, trebati će ti svi (čak i iconv.exe za konverziju u UTF-8 zbog slova s kvačicama). Sve ih staviš u isti folder a openssl instaliraš.

Imaš primjere na:
http://users.dcc.uchile.cl/~pcamacho...ec/xmlsec.html


SOAP riješiš običnim dodavanjem soap env podataka kao iz apis-ovih primjera a onda na kraju samo pošalješ .xml (donji primjer) i pazi da ti je na početku xml-a oznaka za UTF-8 standard. XML prije potpisivanja obavezno pretvoriti sa "iconv -t utf-8 file.xml >file-utf8.xml".


Public Function PostRequest(urlService As String, soapAction As String, xmlRequest As String) As String

Dim oHttReq As MSXML2.XMLHTTP30
Set oHttReq = New MSXML2.XMLHTTP30

oHttReq.Open "POST", urlService, False
oHttReq.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
If soapAction <> "" Then oHttReq.setRequestHeader "SOAPAction", soapAction
oHttReq.send xmlRequest

PostRequest = oHttReq.responseText

If Not oHttReq Is Nothing Then
Set oHttReq = Nothing
End If

End Function

(dodaj XML 3.0 reference u VB6, ja šaljem bez soap akcije jer server prepoznaje po xml-u)

Zadnje uređivanje a1centar : 17.10.2012. at 17:56.
a1centar is offline  
Odgovori s citatom
Old 17.10.2012., 17:35   #82
Quote:
acmevagabundo kaže: Pogledaj post
Dva dana je ništa, i ja se igram sa istim problemima.

xmlsec.exe ne radi ako u xml stavim URI="#RacunZahtjev", a bez njega potpisuje, ali se vraća poruka da je potpis nevaljal.
uvijek ostaje FINA-in signer za 350kn

Quote:
Baphomet kaže: Pogledaj post


Ovako ja radim, bar za sada....napravim XML po uputama, dodam prazne čvorove za potpis i snimim datoteku.

Pokrenem potpisivanje (xmlsec) bez pRefNode. To nije potrebno pošto se podataka o podacima za potpisivanje već nalazi u XML a to je <Reference URI="#racunId">

Jedini problem na koji sam naletio ima veze sa Id koji se nalazi u elementu RacunZahtjev. Ako stavim xml:id onda ne prolazi jer nije u skladu sa xml shemom a ako stavim samo id onda mi ne potpisuje XML. Rjšenje je jednostavno, treba samo pročitati xmlsec FAQ

http://www.aleksey.com/xmlsec/faq.html

dodajte u command line:

--id-attr:Id RacunZahtjev

Zadnje uređivanje a1centar : 17.10.2012. at 17:43.
a1centar is offline  
Odgovori s citatom
Old 17.10.2012., 17:37   #83
Quote:
Veky kaže: Pogledaj post
Kaže:
xmlsec --verify p2.xml
func=xmlSecOpenSSLEvpDigestVerify:file=..\src\open ssl\digests.c:line=229bj=sha1ubj=unknown:error =12:invalid data:data and digest do not match
FAIL
SignedInfo References (ok/all): 0/1
Manifests References (ok/all): 0/0
Error: failed to verify file "p2.xml"

xmlsec --version
xmlsec 1.2.18 (openssl)

Dakle, ili mi nešto krivo potpiše, ili ne koristim dobar ključ i certifikat (učitavanje pcks12 bi trebalo u kontekst povući i certifikate i sve ključeve), no dobijem potpis i x509 podatke i sl. samo očito nešto krivo potpiše.
Najtragičnije je što sam dobio potpisan fajl i s obzirom da izgleda "kao na slici" da je dotični uredno i potpisan. Ali... eh, ali...

Za verify trebaš:

xmlsec --verify --trusted-pem cacert.pem doc-signed-x509.xml

Za cacert.pem exportiraj Finin cert iz IE iz "Trusted Roots...."

Pogledaj:
http://users.dcc.uchile.cl/~pcamacho...ec/xmlsec.html
a1centar is offline  
Odgovori s citatom
Old 17.10.2012., 18:55   #84
Jesam li ja previdio da za potpisivanje nije dosta imati svoj demo.pfx ili demo.p12 nego još uz njega trebam i demo root finin pem certifikat? To bi značilo da j acijelo vrijeme zbilja pogrešno potpisujem. Kako sam samo ovo previdio. Vidim da ti sve zapravo radiš iz command prompta i vb 6. Delphi ima podršku za unicode a xmlsec koristim direktno dllove iz Delphija tako da nema problema s utfom i ostalim.
Veky is offline  
Odgovori s citatom
Old 17.10.2012., 19:05   #85
Quote:
Veky kaže: Pogledaj post
Jesam li ja previdio da za potpisivanje nije dosta imati svoj demo.pfx ili demo.p12 nego još uz njega trebam i demo root finin pem certifikat? To bi značilo da j acijelo vrijeme zbilja pogrešno potpisujem. Kako sam samo ovo previdio. Vidim da ti sve zapravo radiš iz command prompta i vb 6. Delphi ima podršku za unicode a xmlsec koristim direktno dllove iz Delphija tako da nema problema s utfom i ostalim.
Kod potpisivanja, dodavanjem npr. "--trusted-pem cacert.pem" ili bez toga, dobiva se isti rezultat (valjda je finin cert u .p12 fileu).

Zadnje uređivanje a1centar : 17.10.2012. at 19:24.
a1centar is offline  
Odgovori s citatom
Old 17.10.2012., 19:33   #86
To sam i ja pretpostavio jer pcks može sadržavati više certifikata i ključeva. U imenu i serijskom bruju mi kaže ono Fina Ca nešto... I dalje me buni šti imak xml istovjetan onom kao što je pokazao Baphomet no dinamički template radi probleme oko id-a a potpisni template iz xmla mi uopce ne potpise.
Veky is offline  
Odgovori s citatom
Old 17.10.2012., 19:52   #87
Quote:
Veky kaže: Pogledaj post
To sam i ja pretpostavio jer pcks može sadržavati više certifikata i ključeva. U imenu i serijskom bruju mi kaže ono Fina Ca nešto... I dalje me buni šti imak xml istovjetan onom kao što je pokazao Baphomet no dinamički template radi probleme oko id-a a potpisni template iz xmla mi uopce ne potpise.
Možda sam te krivo shvatio, ali signature template mora biti na kraju generiranog xml i onda taj 'zbirni' xml pošalješ na potpisivanje.
a1centar is offline  
Odgovori s citatom
Old 17.10.2012., 20:05   #88
.NET
echo prodje ali potpisani racun uporno vraca (500) Internal Server Error. ima netko takvih iskustava?
trokut is offline  
Odgovori s citatom
Old 17.10.2012., 20:41   #89
Fidllerom pogledaj promet i response. Nekad dobiješ poruku o neispravnom soap formatu, xml-u ili nešto treće, a da ni taj odgovor neće s njihove strane biti u standatdnom obliku. Poanta je što ja dobijem potpisani xml baš onakav kakav je u dokumentaciji, naravno sa drugim cheksumom i vrijednostima ključa tako da dam prije soap komunikacije i pretpostavio da je potpis ok no evo ispostavilo se da negdje griješim. Za danas mi je dosta nadam se da će sutra biti više sreće i pameti. Već sam posumnjao u verzije dllova no i to je valjda ok. Moram priznati da me kužim što je s Id-om Baphomet posebno napravio jer prema onom xmlu sa prethodne stranice isto radim i ja no svejedno referenca kroz URI ne pronađe taj Id osim ako ne izvodi neki dodatni štos. dodjeljivanje xmladdid ili sl.u kodu... Nije baš da je jednostavno no nije ni složeno, a negdje me koči sitnica.
Veky is offline  
Odgovori s citatom
Old 17.10.2012., 20:58   #90
Smile

Quote:
Code111 kaže: Pogledaj post
Jesi rijesio ovo?..kako?meni isto javlja
Internal server error 500 mi javlja samo onda kad mi porezna vrati poruku s greškom (ne valja certifikat, nije dobar OIB i sl.) no do te poruke dolazim kroz error handler:

try
{
...
}
catch (WebException ex)
{
WebResponse oErrResponse = ((WebException)ex).Response;
using (Stream oRespStream = oErrResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(oRespStream);
oPovratDoc.Load(reader);
}
}
catch (Exception ex)
{
oPovratDoc.InnerXml = "<PorukaGreske>" + ex.Message + "</PorukaGreske>";
}
GuraJura is offline  
Odgovori s citatom
Old 17.10.2012., 21:01   #91
Quote:
trokut kaže: Pogledaj post
.NET
echo prodje ali potpisani racun uporno vraca (500) Internal Server Error. ima netko takvih iskustava?
Kad dobiješ (500) Internal Server Error to znači da ti porezna vraća grešku. Kad ti potpisani xml prođe ok nema greške. Do poruke možeš kroz error handler. Pogledaj post iznad.
GuraJura is offline  
Odgovori s citatom
Old 17.10.2012., 21:20   #92
Quote:
Veky kaže: Pogledaj post
Moram priznati da me kužim što je s Id-om Baphomet posebno napravio jer prema onom xmlu sa prethodne stranice isto radim i ja no svejedno referenca kroz URI ne pronađe taj Id osim ako ne izvodi neki dodatni štos. dodjeljivanje xmladdid ili sl.u kodu... Nije baš da je jednostavno no nije ni složeno, a negdje me koči sitnica.
http://www.aleksey.com/xmlsec/faq.html
točka 3.2 pod 3
a1centar is offline  
Odgovori s citatom
Old 17.10.2012., 22:08   #93
@GuraJura, hvala na sugestiji, ali postrimao sam već taj WebException i javlja mi :
<faultstring>Invalid SOAP envelope (from client)</faultstring>.

Jeli ovo u elementu "RacunZahtjev" ispravno : ...... xsi: schemaLocation="http://apis-it.hr/fin/2012/types/f73 ../schema/FiskalizacijaSchema.xsd">
trokut is offline  
Odgovori s citatom
Old 17.10.2012., 22:39   #94
Riješeno. Naravno, moja greška.
Prvo sam omotao a onda potpisivao pa mi je potpis ispao iz Body-a )) !!!! najbolje je prespavat jer se sutra bar pola današnjih problema riješi saamo od sebe
trokut is offline  
Odgovori s citatom
Old 18.10.2012., 08:26   #95
Quote:
Veky kaže: Pogledaj post
Prema tome na potpisivanje šalješ ovo:
Evo, napravio sam copy/paste tvojeg XML i samo promjenio OIB.

Potpisao sam ga i uspješno poslao na poreznu.
__________________
"Make up your mind. Is Death a friend? Then go joyfully to hunt with it, as I did. If it's an enemy, then fight it. But don't sag here like a wounded cow waiting for predators to finish it off. You are not prey, nor I! If we must die, let us die as wolves!”- Nighteyes
Baphomet is offline  
Odgovori s citatom
Old 18.10.2012., 08:30   #96
Idem se samoubit nečime...

Kažem mu da odradi ovo nad onim xml-om, i jedan jedini file za potpisivanje i certificiranje je moj demo.pfx file.

Kod:
      if not Self.fIPF.UcitanXMLCryptoAPI then
             raise Exception.Create ('Nije učitan XML Crypto API');

      doc := xmlParseFile( ptmpfile  );
      if (NOT Assigned (doc) or ( not Assigned (xmlDocGetRootElement(doc) ))) then
             raise Exception.Create ('Ne mogu parsirati XML:' + aXMLDatoteka);
        pZahtjevNode := xmlSecFindNode (xmlDocGetRootElement(doc),PAnsiChar('RacunZahtjev'), nil);

        pSignNode := xmlSecFindNode(xmlDocGetRootElement(doc), PAnsiChar(xmlSecNodeSignature), PAnsiChar(xmlSecDSigNs));

      dsigCtx := xmlSecDSigCtxCreate(nil);
      if not Assigned(dsigCtx) then
              raise Exception.Create ('Ne mogu stvoriti kontekst potpisa');

       // load private key
      dsigCtx^.signKey := xmlSecCryptoAppKeyLoad(pcertfile, xmlSecKeyDataFormatPkcs12, pkeypwd, nil, nil);
      if not Assigned(dsigCtx^.signKey) then
              raise Exception.Create ('Ne mogu otvoriti ključ potpisa');

       // set key name to the file name, this is just an example! */
      if (xmlSecKeySetName(dsigCtx^.signKey, pcertfile) < 0) then
              raise Exception.Create ('Nije postavljena oznaka potpisa');

       // sign the template

      if(xmlSecDSigCtxSign(dsigCtx, pSignNode) < 0) then
              raise Exception.Create ('Dokument nije moguće potpisati');

     xmlSaveFormatFile(ptmpfile, doc,1 );

     xmlCleanupParser();

      if Assigned(dsigCtx) then
          xmlSecDSigCtxDestroy(dsigCtx); // ako postoji sec. kontekst oslobađam ga.

      if Assigned(doc) then
          xmlFreeDoc(doc);  // ako postoji xml objekt, oslobađam ga
I ne radi. Nađe čvor Signature no on nema nikakvih podčvorova i sl. i vrati -1 tj. exception

Zadnje uređivanje Veky : 18.10.2012. at 09:02.
Veky is offline  
Odgovori s citatom
Old 18.10.2012., 10:43   #97
@a1centar za --id-attr:Id RacunZahtjev pohvale. To sam u potpunosti previdio.
@Veky ako ćeš se samoubit nečim pridružujem ti se

Koristim xmlsec iz komandne linije za potpisivanje xml-a, i ne javi mi grešku, ali mi server uredno vraća neispravan digitalni potpis. Satvio sam u dokument saznanja odavde, koristio iconv za pretvorbu u UTF8, ali opet neće pa neće. Grrrr.
acmevagabundo is offline  
Odgovori s citatom
Old 18.10.2012., 11:04   #98
Ovako ide iz Delphia :

Nakon što učitam XML datoteku sa :

doc := xmlParseFile(XMLfile)

napišem ovo :


node1 : xmlNodePtr;
attr : xmlAttrPtr;

node1 := xmlSecFindNode(xmlDocGetRootElement(doc), PChar('RacunZahtjev'), PChar('http://www.apis-it.hr/fin/2012/types/f73'));
attr := xmlHasProp(node1, PChar('Id'));
xmlAddID(nil, doc, PChar('racunId'), attr);


To rješava problem sa Id-om
__________________
"Make up your mind. Is Death a friend? Then go joyfully to hunt with it, as I did. If it's an enemy, then fight it. But don't sag here like a wounded cow waiting for predators to finish it off. You are not prey, nor I! If we must die, let us die as wolves!”- Nighteyes
Baphomet is offline  
Odgovori s citatom
Old 18.10.2012., 11:07   #99
Heh, a sad treba naći način kako "potpisati" običan string. Promjenili su algoritam za izračun kontrolnog broja, valjda zato jer .NET-ovci nisu u stanju izvući privatni ključ iz certifikata u windowsima ...šala, šala
__________________
"Make up your mind. Is Death a friend? Then go joyfully to hunt with it, as I did. If it's an enemy, then fight it. But don't sag here like a wounded cow waiting for predators to finish it off. You are not prey, nor I! If we must die, let us die as wolves!”- Nighteyes
Baphomet is offline  
Odgovori s citatom
Old 18.10.2012., 12:52   #100
jesam ga, jesam!

Ovim putem javno zahvaljujem na velikom strpljenju i podršci kolegi Delphijašu - Baphometu.

Srećom, gablec povodom rođendana kolegice s posla i jedan Tuborg bili su odlična uvertira u uspješno potpisivanje i slanje.

Istina, trenutno je prošla varijanta sa templateom unutar poruke koju potpisujem (a već sam pomislio posumnjati u način exportiranja certifikata) pa me još muči mogu li sve odraditi i dinamički kreiranim templateom, mada nije uopće presudno.
Veky is offline  
Odgovori s citatom
Odgovor



Kreni na podforum




Sva vremena su GMT +2. Trenutno vrijeme je: 02:01.