Programiranje Za programere i one koji to žele postati ... |
|
|
17.10.2012., 17:32
|
#81
|
Registrirani korisnik
Registracija: Jun 2009.
Lokacija: Split
Postova: 10
|
Quote:
Kruno M kaže:
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.
|
|
|
17.10.2012., 17:35
|
#82
|
Registrirani korisnik
Registracija: Jun 2009.
Lokacija: Split
Postova: 10
|
Quote:
acmevagabundo kaže:
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:
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.
|
|
|
17.10.2012., 17:37
|
#83
|
Registrirani korisnik
Registracija: Jun 2009.
Lokacija: Split
Postova: 10
|
Quote:
Veky kaže:
Kaže:
xmlsec --verify p2.xml
func=xmlSecOpenSSLEvpDigestVerify:file=..\src\open ssl\digests.c:line=229 bj=sha1 ubj=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
|
|
|
17.10.2012., 18:55
|
#84
|
~ napustio forum ~
Registracija: Dec 2002.
Postova: 3,672
|
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.
|
|
|
17.10.2012., 19:05
|
#85
|
Registrirani korisnik
Registracija: Jun 2009.
Lokacija: Split
Postova: 10
|
Quote:
Veky kaže:
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.
|
|
|
17.10.2012., 19:33
|
#86
|
~ napustio forum ~
Registracija: Dec 2002.
Postova: 3,672
|
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.
|
|
|
17.10.2012., 19:52
|
#87
|
Registrirani korisnik
Registracija: Jun 2009.
Lokacija: Split
Postova: 10
|
Quote:
Veky kaže:
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.
|
|
|
17.10.2012., 20:05
|
#88
|
Registrirani korisnik
Registracija: Feb 2008.
Lokacija: Zg
Postova: 119
|
.NET
echo prodje ali potpisani racun uporno vraca (500) Internal Server Error. ima netko takvih iskustava?
|
|
|
17.10.2012., 20:41
|
#89
|
~ napustio forum ~
Registracija: Dec 2002.
Postova: 3,672
|
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.
|
|
|
17.10.2012., 20:58
|
#90
|
Registrirani korisnik
Registracija: Oct 2012.
Postova: 14
|
Quote:
Code111 kaže:
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>";
}
|
|
|
17.10.2012., 21:01
|
#91
|
Registrirani korisnik
Registracija: Oct 2012.
Postova: 14
|
Quote:
trokut kaže:
.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.
|
|
|
17.10.2012., 21:20
|
#92
|
Registrirani korisnik
Registracija: Jun 2009.
Lokacija: Split
Postova: 10
|
Quote:
Veky kaže:
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
|
|
|
17.10.2012., 22:08
|
#93
|
Registrirani korisnik
Registracija: Feb 2008.
Lokacija: Zg
Postova: 119
|
@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">
|
|
|
17.10.2012., 22:39
|
#94
|
Registrirani korisnik
Registracija: Feb 2008.
Lokacija: Zg
Postova: 119
|
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
|
|
|
18.10.2012., 08:26
|
#95
|
Nomad
Registracija: Dec 2002.
Lokacija: Unknown
Postova: 30,129
|
Quote:
Veky kaže:
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
|
|
|
18.10.2012., 08:30
|
#96
|
~ napustio forum ~
Registracija: Dec 2002.
Postova: 3,672
|
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.
|
|
|
18.10.2012., 10:43
|
#97
|
Registrirani korisnik
Registracija: Oct 2009.
Postova: 1,203
|
@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.
|
|
|
18.10.2012., 11:04
|
#98
|
Nomad
Registracija: Dec 2002.
Lokacija: Unknown
Postova: 30,129
|
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
|
|
|
18.10.2012., 11:07
|
#99
|
Nomad
Registracija: Dec 2002.
Lokacija: Unknown
Postova: 30,129
|
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
|
|
|
18.10.2012., 12:52
|
#100
|
~ napustio forum ~
Registracija: Dec 2002.
Postova: 3,672
|
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.
|
|
|
|
|
Sva vremena su GMT +2. Trenutno vrijeme je: 02:01.
|
|
|
|