Potpisivanje XML-a u Compact Framework-u

Nov 22, 2012 at 8:04 AM
Edited Nov 23, 2012 at 6:38 PM

Dali je netko napravio potpisivanje u CF za PDA uređaje koji rade na windows mobile operativnom sistemu ?

S obzirom da je "CF" limitiran u odnosu na desktop Framework dosta funkcija nije dostupno tako i "System.Security.Cryptography.xml" gdje se nalaze funkcije kod redovnog Framework-a .

 Isto tako ne postoji funkcija "PrivateKey" u "System.Security.Cryptography.X509Certificates" za izvaditi privatekey iz certifikata.

Uspio sam rješiti spremanje certifikata u store i potpisati podatke za dobivanje ZKI broja, ako je netko zainteresiran mogu poslati source.

Sada me muči potpisivanje xml-a pa me zanima dali je moguće potpisati u programu i na koji način i ima li netko prijedlog u kako to napraviti ili da kreiram račun i potpišem pomoću web service-a.

  

 

 

 

 

Coordinator
Nov 22, 2012 at 1:43 PM

Web Service (ili još bolje WCF) je sasvim OK način izvedbe za ovo :)

U 4.0 (ili još bolje - 4.5), dll u kojem imaš IService interface, možeš koristiti i kao native dll :) - kao da imaš dll kojeg referenciraš kao i sve ostale... a funkcionira kao WCF... ako ne možeš nikako drukčije, ovo sa WCF je jako zgodno rješenje. Samo u tom slučaju, pripazi na security i ostale stvari vezane uz to...

Coordinator
Nov 22, 2012 at 1:46 PM

U toj varijanti, naravno, pripazi i na činjenicu da su certifikati obveznika na tvom serveru, što nije baš zahvalna situacija :)

Coordinator
Nov 22, 2012 at 1:58 PM

Teoretski gledajući, ti možeš svoj certifikat poslati preko byte arraya na WCF, sa enkriptiranom lozinkom, pa čak i enkriptiranim byte array. Kada obaviš potpis (prije toga array u memoriji servera dekriptiraš, zajedno s lozinkom, "deserijaliziraš" ga u certifikat) jednostavno ga dispozaš... do sljedećeg zahtjeva.. U tom slučaju ne trebaš imati fizički certifikat na serveru.. ali moraš paziti na konekciju... SSL obavezno i ostale security stvari...

Nov 23, 2012 at 7:28 AM

Pozdrav,

mene isto muči problem dobivanja privatnog ključa. Ja radim riješenje preko webservicea i svi certifikati će biti na serveru koji dalje propagira prema cis-u!

Glavni problem je samo kako dobiti ZKI u slučaju ako je server nedostupan u tom trenutku a ti moraš izdati račun sa ZKI-jem. Inače mislim da je webservice ili WCF najelegantnije u našem slučaju upravo zbog handlanja certifikata na samim uređajima ali i zbog nedostatka nekih stvari u .NetCF-u npr.  kao i CanonicalizationMethod. Nažalost ispada da certifikat ipak mora biti na uređaju a mi ne možemo dobiti privatni ključ..

 

 

ps. kako misliš uspio spremiti certifikat u store? Može malo više informacija.

Coordinator
Nov 23, 2012 at 8:44 AM

možda pomogne:

http://social.msdn.microsoft.com/Forums/eu/csharplanguage/thread/4011d0ea-3dba-4d04-b6cf-adada7956f02

Nov 23, 2012 at 9:06 AM

Hvala na odgovoru!

Vidio sam već post ali ne kužim i nisam uspio pronaći kako dobiti privatni ključ iz pfx file-a.  

Nov 23, 2012 at 9:47 AM

Trenutno nisam blizu kompa na kojem mi je način pristupanja pfx file-u. Dolazim kasno navečer.

Trenutno sam napravio spremanje certifikata u store i potpisivanja teksta za dobivanje ZKI broja na PDA uređaju, dalje nisam radio jer sam čekao u kojem smjeru da krenem.

Javite gdje mogu poslati trenutnu verziju da bude dostupna svima.

Nov 23, 2012 at 9:57 AM

To bi bilo super. Kolega zahvaljujem se unaprijed.

Coordinator
Nov 23, 2012 at 10:31 AM

@dotvip, ako hoćeš, možemo je staviti na Downloads stranicu, uz noticu o čemu se radi i tko je stvarni autor?

Nov 24, 2012 at 12:10 PM

Uskoro pogledajte na download stranici način dobivanja ZKI broja na PDA uređajima.

Coordinator
Nov 24, 2012 at 4:40 PM

Uploadano na Downloads, hvala dotvip :)

Nov 25, 2012 at 9:31 AM

Ekipa,

zahvaljujem se od srca:)

Nov 25, 2012 at 10:24 AM
davorin_cp wrote:

Ekipa,

zahvaljujem se od srca:)


Dali si isprobao dali radi na drugom uređaju osim IPAQ 114 WM 6.1 ?

Molim da prijavite na kojim uređajima radi a na kojima ne.

Nov 25, 2012 at 11:39 AM

Sutra ću probati na uređaju pa javim.

Nov 26, 2012 at 1:38 PM

Probano na Psion-u WM 6.1 classic i radi ok. Mislim da ne bi trebalo biti problema niti s  uređajima koji su na Win Ce-u.

Zahvaljujem se još jedanput! 

Mar 8, 2013 at 1:02 PM
Edited Mar 8, 2013 at 1:05 PM
Pozdrav,

meni je u CF-u potrebno dobivanje ZKI-a, JIR dobivam preko servisa.

Gdje se točno nalazi to riješenje za Compact Framework? Pod downloads ne vidim ništa za CF?



Zahvaljujem unaprijed.
Coordinator
Mar 8, 2013 at 1:04 PM
Pogledaj neki od starijih release-ova, tamo je negdje...
Mar 25, 2013 at 1:28 AM
Edited Mar 25, 2013 at 2:48 AM
Da li ima netko riješeno potpisivanje XML-a u .NET cf?
Ili barem opis kako je to drugačije riješio?
Mar 25, 2013 at 9:07 AM
http://fiscalization.codeplex.com/
Najjednostavnije, dodaj source preko NuGet-a u svoj projekt i kompajliraj sa CF.

Pozdrav
Tomislav
Mar 25, 2013 at 7:04 PM
Edited Mar 25, 2013 at 7:45 PM
NuGet na radi na VS2008 kojeg trebam radi .net cf :(
Može neki primjer upotrebe za C# i .net cf (stvarno nisam doma u VB-u)?
Mar 25, 2013 at 8:21 PM
U ovom download-u je cijeli projekt.
Cis.Fiscalization v1.0.0

Uzmi samo /src/Fiscalization/Cis folder u svoj projekt, i preko Fiscalization klase šalješ podatke u poreznu.
public static class Fiscalization
{
    SendInvoiceRequest(RacunZahtjev request, X509Certificate2 cert = null);
    SendLocationRequest(PoslovniProstorZahtjev request, X509Certificate2 cert = null);
    SendEcho(string echo);
}
Mar 25, 2013 at 9:50 PM
Da ali Fiscalization.cs koristi System.Security.Cryptography.Xml koji ne postoji u .net cf-u, o čemu je i cijeli post....
Mar 26, 2013 at 9:36 AM
Sorry ja pišem za Client Profile, zanemarite odgovor. :)

Trebao sam nedavno nešto slično za potpis xml-a u SilverLight-u i imao sam isti problem.
Na kraju je java applet bio rješenje.

Naišao sam na ovaj alat http://www.eldos.com/sbb/net-xml.php.
Jedino što je 500-ak dolara po developeru.
Mar 26, 2013 at 10:44 AM
S obzirom da sam i otvorio ovu diskusiju, i napravio soluciju za dobivanje ZKI broja u compact framework-u koji je i objavljen na ovom projektu, htio bi objasniti da u trenutku kada sam to radio nisam našao rješenje kako potpisati xml u PDA-u zbog ograničenja koji ima CF, nego sam potpisivanje xml i slanje istog odradio preko WCF-a koji se nalazi na serveru.

Korisnik je testirao rješenje od 01.01.13 do 24.03.2013 sa testnim serverom CIS-a, a od 25.03.2013 rješenje je na produkcijskom serveru CIS-a.

U proteklih 3 mjeseca nije se desila niti jedna greška ili problem sa potpisivanjem xml-a i dobivanjem JIR-a.

Jedini problem nastaje kod povezivanja PDA-a uređaja na internet, jer se koristi bluetooh konekcija PDA-a na mobilni telefon, te mobilni telefon uspostavlja vezu na internet i tu dolazi ponekad do problema jer veza ovisi o pokrivenosti područja GSM signalom. Primjetio sam da ponekad kada i imam vezu na internet u trenutku dolaznog poziva internet veza se prekine.
Mar 26, 2013 at 10:44 AM
Upravo to rješenje pokušavam implemetirati (napomena da generirani xml potpis nije po zahtjevima porezne te ga treba doraditi).
Ima li tko neko drugo rješenje?
Mar 26, 2013 at 11:42 AM
dotVip wrote:
S obzirom da sam i otvorio ovu diskusiju, i napravio soluciju za dobivanje ZKI broja u compact framework-u koji je i objavljen na ovom projektu, htio bi objasniti da u trenutku kada sam to radio nisam našao rješenje kako potpisati xml u PDA-u zbog ograničenja koji ima CF, nego sam potpisivanje xml i slanje istog odradio preko WCF-a koji se nalazi na serveru.

Korisnik je testirao rješenje od 01.01.13 do 24.03.2013 sa testnim serverom CIS-a, a od 25.03.2013 rješenje je na produkcijskom serveru CIS-a.

U proteklih 3 mjeseca nije se desila niti jedna greška ili problem sa potpisivanjem xml-a i dobivanjem JIR-a.

Jedini problem nastaje kod povezivanja PDA-a uređaja na internet, jer se koristi bluetooh konekcija PDA-a na mobilni telefon, te mobilni telefon uspostavlja vezu na internet i tu dolazi ponekad do problema jer veza ovisi o pokrivenosti područja GSM signalom. Primjetio sam da ponekad kada i imam vezu na internet u trenutku dolaznog poziva internet veza se prekine.
Može li VS2008 solution za tvoje rješenje?
Mar 26, 2013 at 12:07 PM
Kao što sam i napisao rješenje koje sam napravio je pomoću WCF service-a, te je dio jednog velikog projekta te mi nije jednostavno izdvojiti dio servica.

Smjernice koji ti mogu pomoći su:
  1. koristi moje rješenje oko dobivanja ZKI broja u PDA-u
  2. kreiraj WCF service na serveru te šalji potrebne podatke za kreiranje xml datoteke na service iz PDA-a ( broj računa, iznos, pdv itd )
  3. WCF service komunicira sa CIS-om
  4. preuzmi odgovor od service-a u PDA ( dobiveni JIR broj ili eventualno grešku )
i to je to, nije lagano ali je izvedivo i funkcionira ( za sada ).

u WCF service je implementiran dll od Raverus.Fiskalizacija, kao i dio Raverus.fiskalizacija u CF za dobivanje ZKI broja offline
Mar 26, 2013 at 10:14 PM
Edited Mar 28, 2013 at 12:57 PM
Evo došao do finalnog zaključka da Windows CE (osim Mobile verzije) nema potpuni CryrptoAPI.
Što pojašnjava zašto .net cf ne podržava x509 PCKS #12 ključeve (.pfx datoteke).

Znači dotVip-ovo rješenje za računanje zaštitnog koda pod .net cf radi isključivo na Windows Mobile (5 ili novijem).....
Mar 29, 2013 at 9:03 PM
Edited Mar 29, 2013 at 9:04 PM
Evo uspio sam modificirati DiskalizacijaDEV da radi pod .NET Compact Frameworku.

Glavni problem je da Windows CE (osim Mobile verzija) ne podržava X509 certifikate sa privatnim ključem niti ima CryptoAPI exkstenzije za rad za njima. Zbog toga .NET CF nema System.Security.Cryptography.Xml niti punu System.Security.Cryptography.X509Certificates klasu pošto se one intezivno koriste tim funkcijama.

Ukratko potrebno je na punom .NET exportirati RSA i sve popratne parametre certifikata, a u .NET CF modificirati PopratneFunkcije.Potpisivanje PotpisiTekst i PotpisiXmlDokument da rade direktno sa RSA, SHA i MD5 kriptografskim funkcijama. Meni najveći problem je bila priprema XML za potpisivanje, tj. svođenje na xml-exc-c14n format....
Jun 13, 2013 at 8:40 AM
corezero wrote:
Evo uspio sam modificirati DiskalizacijaDEV da radi pod .NET Compact Frameworku.

Glavni problem je da Windows CE (osim Mobile verzija) ne podržava X509 certifikate sa privatnim ključem niti ima CryptoAPI exkstenzije za rad za njima. Zbog toga .NET CF nema System.Security.Cryptography.Xml niti punu System.Security.Cryptography.X509Certificates klasu pošto se one intezivno koriste tim funkcijama.

Ukratko potrebno je na punom .NET exportirati RSA i sve popratne parametre certifikata, a u .NET CF modificirati PopratneFunkcije.Potpisivanje PotpisiTekst i PotpisiXmlDokument da rade direktno sa RSA, SHA i MD5 kriptografskim funkcijama. Meni najveći problem je bila priprema XML za potpisivanje, tj. svođenje na xml-exc-c14n format....
Da li s nama možeš podijeliti koji snippet da ne moramo prolaziti sve kroz što si i ti (potpisivanje i svođenje na xml-exc-c14n)??
Jun 13, 2013 at 9:24 AM
Može, smo trebam objašnjenje kako attachati datoteke.
Ima stvarno dosta koda (u više datoteka), a imam VS2008 solution samo sa fiskalizacijom....
Jun 13, 2013 at 9:52 AM
Moram priznati da nisam uploadao na codeplex. Koliko vidim nije tako složeno http://www.youtube.com/watch?v=SR4N51_248U
Možda može netko iz grupe pomoći???
Coordinator
Jun 14, 2013 at 8:06 AM
Pod verzijom FiskalizacijaDEV v1.2. postoji nešto vezano uz CF: https://fiskalizacija.codeplex.com/releases/view/96854

Uvijek, naravno, možemo napraviti upload nove ZIP datoteke, samo molim da autor CF komponente brine o tome - pošaljite mi privatno ZIP file i stavit ćemo ga u Downloads pod FiskalizacijaDEV v2.0 (current release).
Jun 14, 2013 at 10:28 AM
Da znam za to, ali to je samo dio koji vrši čitanje certifikata i digitalno potpisivanje, te radi samo na Windows Mobile platformi (ne i običnom Windows CE).
Molim nrasinec i zdig da mi pošalju mail adrese na koje im mogu poslati VS2008 projekte....
Coordinator
Jun 15, 2013 at 8:23 AM
Hvala što si se uključio u ovo - download je ovdje: https://fiskalizacija.codeplex.com/releases/view/97679 (Fiskalizacija .NET CF (by corezero))
Jul 13, 2013 at 10:55 AM
Ovaj solution od coreero-a kad se certifikat pretvarau u xml, puca na metodi string temp = rsa.ToXmlString(true);, nikako ne mogu dobiti to pretvaranje....

Greška koju dobivam je ...

Key not valid for use in specified state

at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
at System.Security.Cryptography.Utils._ExportKey(SafeKeyHandle hKey, Int32 blobType, Object cspObject)
at System.Security.Cryptography.RSACryptoServiceProvider.ExportParameters(Boolean includePrivateParameters)
at System.Security.Cryptography.RSA.ToXmlString(Boolean includePrivateParameters)
at RSAToXxlString.Form1.button1_Click(Object sender, EventArgs e) in c:\Users\core\Documents\Visual Studio 2012\Projects\RSAToXxlString\RSAToXxlString\Form1.cs:line 53
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at RSAToXxlString.Program.Main() in c:\Users\core\Documents\Visual Studio 2012\Projects\RSAToXxlString\RSAToXxlString\Program.cs:line 17
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Jul 15, 2013 at 5:58 AM
Vjerovatno si učitao pod nazivom "FISKAL 1" neki certifikat bez privatnog ključa, jer ti greška veli da ključ koji je odabrao kod nema privatnu komponentu.
Debuugiraj i pogledaj koji ključ je kod odabrao......
Jul 15, 2013 at 2:09 PM
corezero wrote:
Vjerovatno si učitao pod nazivom "FISKAL 1" neki certifikat bez privatnog ključa, jer ti greška veli da ključ koji je odabrao kod nema privatnu komponentu.
Debuugiraj i pogledaj koji ključ je kod odabrao......
Kada pokušavam demo certifikat exportirati u xml onda mi se pojavljuje problem, sa produkcijskim nema problema.....
Zbunjen sam ali zar nebi trebalo moći i jedan i drugi exportirati u xml
Jul 15, 2013 at 3:01 PM
Ivica76 wrote:
corezero wrote:
Vjerovatno si učitao pod nazivom "FISKAL 1" neki certifikat bez privatnog ključa, jer ti greška veli da ključ koji je odabrao kod nema privatnu komponentu.
Debuugiraj i pogledaj koji ključ je kod odabrao......
Kada pokušavam demo certifikat exportirati u xml onda mi se pojavljuje problem, sa produkcijskim nema problema.....
Zbunjen sam ali zar nebi trebalo moći i jedan i drugi exportirati u xml
Probaj moj prepravljeni RSAToXxl projekt koji koristi exportani certifikat iz file-a.
http://www.mediafire.com/?lsk20x5zqzt2dyz
Jul 15, 2013 at 3:15 PM
Meni je normalno radi sa demo certifikatom...
Jul 15, 2013 at 4:00 PM
zdig wrote:
Ivica76 wrote:
corezero wrote:
Vjerovatno si učitao pod nazivom "FISKAL 1" neki certifikat bez privatnog ključa, jer ti greška veli da ključ koji je odabrao kod nema privatnu komponentu.
Debuugiraj i pogledaj koji ključ je kod odabrao......
Kada pokušavam demo certifikat exportirati u xml onda mi se pojavljuje problem, sa produkcijskim nema problema.....
Zbunjen sam ali zar nebi trebalo moći i jedan i drugi exportirati u xml
Probaj moj prepravljeni RSAToXxl projekt koji koristi exportani certifikat iz file-a.
http://www.mediafire.com/?lsk20x5zqzt2dyz
Puno hvala, ovaj radi ....ali i dalje mi nije jasno zašto ovaj prije nije....
Jul 15, 2013 at 7:42 PM
Ivica76 wrote:
zdig wrote:
Ivica76 wrote:
corezero wrote:
Vjerovatno si učitao pod nazivom "FISKAL 1" neki certifikat bez privatnog ključa, jer ti greška veli da ključ koji je odabrao kod nema privatnu komponentu.
Debuugiraj i pogledaj koji ključ je kod odabrao......
Kada pokušavam demo certifikat exportirati u xml onda mi se pojavljuje problem, sa produkcijskim nema problema.....
Zbunjen sam ali zar nebi trebalo moći i jedan i drugi exportirati u xml
Probaj moj prepravljeni RSAToXxl projekt koji koristi exportani certifikat iz file-a.
http://www.mediafire.com/?lsk20x5zqzt2dyz
Puno hvala, ovaj radi ....ali i dalje mi nije jasno zašto ovaj prije nije....
Koliko se sjecam ni meni nije radilo,
mislim da je trik u X509KeyStorageFlags.Exportable.
Jul 15, 2013 at 8:45 PM
E da kod učitavanja certifikata u Windowse nisi označio da se privatni ključ može exportirati.....
Jul 15, 2013 at 9:04 PM
U svakom slučaju zahvalio bih se corezero-u na rjesenju koje je
neki dan uspjesno polozilo kod porezne inspekcije :)
Ako nrasinec ima volje slobodno nek uploada moju verziju RSAToXxl_.