Skrypt do szyfrowania i wysyłania JPK

1,187 views
Skip to first unread message

waf

unread,
Jul 12, 2016, 5:04:56 PM7/12/16
to jednolity-pl...@googlegroups.com
Witam

Tworząc obsługę wysyłania plików JPK przygotowałem mały PoC skrypt w pythonie, 
który realizuje wszystkie kroki procedury, tzn.

1. Szyfrowanie pliku JPK i  przygotowanie pliku inicjalizującego sesję (uwierzytelniającego)
2. Inicjalizację sesji (wysłanie podpisanego pliku uwierzytelniającego) i wysyłanie zaszyfrowanego pliku JPK
3. Sprawdzanie statusu i pobieranie UPO


Ponieważ wygląda na to, że działa więc może się komuś przyda do testowania czy jako wzór.

Pozdrawiam
waf

apmszy...@gmail.com

unread,
Jul 13, 2016, 11:17:44 AM7/13/16
to Jednolity Plik Kontrolny
Dzięki!
Przyda mi się do testowania.
A czy da się też zrobić w Pythonie podpis XAdES-BES?

pozdrawiam,
Adam


W dniu wtorek, 12 lipca 2016 23:04:56 UTC+2 użytkownik waf napisał:
Witam

Tworząc obsługę wysyłania plików JPK przygotowałem mały PoC skrypt w pythonie, 
który realizuje wszystkie kroki procedury, tzn.

1. Szyfrowanie pliku JPK i  przygotowanie pliku inicjalizującego sesję (uwierzytelniającego)
2. Inicjalizację sysji (wysłanie podpisanego pliku uwierzytelniającego) i wysyłanie zaszyfrowanego pliku JPK
3. Sprawdzanie statusu i pobieranie UPO

waf

unread,
Jul 13, 2016, 12:08:12 PM7/13/16
to Jednolity Plik Kontrolny, apmszy...@gmail.com
W dniu środa, 13 lipca 2016 17:17:44 UTC+2 użytkownik apmszymanski napisał:
A czy da się też zrobić w Pythonie podpis XAdES-BES?

Jakby mieć dostęp do certyfikatu to by się dało, ale w przypadku kwalifikowanego sprawa się komplikuje bo trzeba się dostać do czytnika kart. Niby jakieś SDK czy aplety są dostępne ale z mojego punktu widzenia gra nie  jest warta świeczki. Raz na miesiąc podpisać jeden mały plik w XML można

a) ściągając go na komputer klienta 
b) podpisać w używanym programie
c) zuploadować podpisany plik do systemu.

pozdr
WF

apmszy...@gmail.com

unread,
Jul 14, 2016, 5:58:03 AM7/14/16
to Jednolity Plik Kontrolny, apmszy...@gmail.com
W specyfikacji interfejsu jest taki fragment: 
"Schemat XSD dokumentu XML stanowiącego treść żądania jest udostępniony na stronie http://jpk.mf.gov.pl/ w sekcji „Specyfikacja interfejsów usług Jednolitego Pliku Kontrolnego” w bloku „Pliki do pobrania”. We wskazanej lokalizacji umieszczone są przykładowe plik metadanych podpisane certyfikatem niekwalifikowanym."
Zatem można tego certyfikatu użyć do podpisu pliku metadanych? Mowa oczywiście o testowym interfejsie.

Nie mam zestawu do podpisu elektronicznego, na razie potrzebuję sprawdzić podpisywanie w wersji testowej.

pozdrawiam,
Adam

waf

unread,
Jul 14, 2016, 7:24:31 AM7/14/16
to Jednolity Plik Kontrolny, apmszy...@gmail.com
witam
Wydaje mi się, że te certyfikaty, które tam są służą do autentykacji serwera i szyfrowania klucza.
Do podpisu potrzebujesz klucza prywatnego.

Ponieważ podpisane podpisem niekwalifikowanym przykładowe pliki są akceptowane więc
prawdopodobnie na bramce testowej można przesyłać pliki podpisane podpisem niekwalifikowanym.

Do sprawdzenia czy przejdzie podpis certyfikatem self-signed.

WF

apmszy...@gmail.com

unread,
Jul 14, 2016, 8:48:42 AM7/14/16
to Jednolity Plik Kontrolny, apmszy...@gmail.com
Dzięki, ale jakim programem mogę to przetestować/podpisać XAdES-BES?

pozdr,
Adam

Mariusz Michalski

unread,
Jul 15, 2016, 5:21:39 AM7/15/16
to Jednolity Plik Kontrolny, apmszy...@gmail.com
Środowisko testowe obsługuje podpisy certyfikatem self-signed.

Mariusz Michalski

unread,
Jul 15, 2016, 5:25:33 AM7/15/16
to Jednolity Plik Kontrolny, apmszy...@gmail.com
Wiele narzędzi obsługuje podpis XAdES-BES. Podobno aplikacja proCertum SmartSign umożliwia skorzystanie z certyfikatu self-signed, ale to informacje z sieci - nie potwierdzone, nie znam narzędzia.

jnowin...@gmail.com

unread,
Jul 15, 2016, 5:47:31 AM7/15/16
to Jednolity Plik Kontrolny

spróbowałem przetestować obsługę wysyłania plików JPK wg załączonego skryptu w pythonie,


etap nr 1, czyli szyfrowanie pliku JPK (powstał jpk1.zip.aes) i przygotowanie pliku uwierzytelniającego (powstał jpk1-initupload.xml) wykonał się poprawnie,
etap nr 2, czyli podpisanie pliku uwierzytelniającego (za pomocą aplikacji Szafir) wykonał się poprawnie (powstał jpk1-initupload.xml.xades),

etap nr 3, czyli wysyłka plików dała błędy:
komenda: python wjpk.py upload jpk1-initupload.xml.xades daje błąd:

 
C:\python>python wjpk.py upload jpk1-initupload.xml.xades
Wysylanie jpk1-initupload.xml.xades...
Traceback (most recent call last):
  File "wjpk.py", line 148, in <module>
    main(sys.argv)
  File "wjpk.py", line 143, in main
    ref= upload(argv[2])
  File "wjpk.py", line 92, in upload
    print resp.text
  File "C:\Python27\Lib\encodings\cp852.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\xef' in position 0: character maps
 to <undefined>

C:\python>


co robię nie tak ? :-)



W dniu wtorek, 12 lipca 2016 23:04:56 UTC+2 użytkownik waf napisał:
Witam

Tworząc obsługę wysyłania plików JPK przygotowałem mały PoC skrypt w pythonie, 
który realizuje wszystkie kroki procedury, tzn.

1. Szyfrowanie pliku JPK i  przygotowanie pliku inicjalizującego sesję (uwierzytelniającego)
2. Inicjalizację sysji (wysłanie podpisanego pliku uwierzytelniającego) i wysyłanie zaszyfrowanego pliku JPK
3. Sprawdzanie statusu i pobieranie UPO

waf

unread,
Jul 15, 2016, 6:37:26 AM7/15/16
to Jednolity Plik Kontrolny, jnowin...@gmail.com
witam
Jest prawdopodobnie jakiś problem ze znakiem BOM na początku podpisanego pliku, 
a być może z kodowaniem pliku.
Spróbuj zmienić pierwszą linię w funkcji upload gdzie wczytuje się podpisany plik na 

initupload_xml= open(jpk_xades, 'rb').read().decode('utf-8-sig').encode('utf-8')

może pójdzie.

WF

jnowin...@gmail.com

unread,
Jul 15, 2016, 7:48:14 AM7/15/16
to Jednolity Plik Kontrolny, jnowin...@gmail.com

po zmianie:
initupload_xml= open(jpk_xades, 'rb').read()

na
initupload_xml= open(jpk_xades, 'rb').read().decode('utf-8-sig').encode('utf-8')

nadal jest ten sam komunikat :
:-(


C:\python>python wjpk.py upload jpk1-initupload.xml.xades
Wysylanie jpk1-initupload.xml.xades...
Traceback (most recent call last):
  File "wjpk.py", line 149, in <module>
    main(sys.argv)
  File "wjpk.py", line 144, in main
    ref= upload(argv[2])
  File "wjpk.py", line 93, in upload

    print resp.text
  File "C:\Python27\Lib\encodings\cp852.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\xef' in position 0: character maps
 to <undefined>

pozdrawiam
Jacek

waf

unread,
Jul 19, 2016, 3:09:42 AM7/19/16
to Jednolity Plik Kontrolny, jnowin...@gmail.com
witam

Wgrałem wersję, która nie powinna mieć tego problemu.

WF

jnowin...@gmail.com

unread,
Jul 21, 2016, 3:56:21 AM7/21/16
to Jednolity Plik Kontrolny, jnowin...@gmail.com
witam,

rewelacja !!!
wszystko jest OK,

poniżej podaję komunikaty z wysyłki:


C:\python>python wjpk.py init jpk1.xml
C:\python>python wjpk.py upload jpk1-initupload.xml.xades
Wysylanie jpk1-initupload.xml.xades...
Reference 0c624b3d02235cd7000000b0427cb20c
Wysylanie jpk1.zip.aes...
C:\python>python wjpk.py status jpk1
Status 200 u'{"Code":120,"Description":"Sesja zosta\u0142a poprawnie zako\u0144c
zona. Dane zosta\u0142y poprawnie zapisane. Trwa weryfikacja dokumentu","Details
":"","Upo":"","Timestamp":"2016-07-21T07:36:25.09582+00:00"}'
C:\python>

na stronie MF piszą że:
1.środowisko testowe tymczasowo kończy przetwarzanie na statusie 120 w związku z rekonfiguracją

2.uruchomione  środowisko pre-produkcyjne e-dokumenty.mf.gov.pl  będzie służyło do testowania przesyłania plików JPK do dnia 29.07.2016 roku.

czyli niewiele czasu zostało na testy,

Jacek

waf

unread,
Jul 21, 2016, 5:11:56 PM7/21/16
to Jednolity Plik Kontrolny
Ja to rozumiem w ten sposob, ze do 29 lipca mozna testowac zarowno w srodowisku testowym jak i pre-produkcyjnym a pozniej juz tylko w testowym bo pre-produkcyjne stanie sie produkcyjnym. Srodowisko testowe bedzie caly czas dostepne, rowniez po 29 lipca.

WAF

apmszy...@gmail.com

unread,
Jul 25, 2016, 5:21:35 AM7/25/16
to Jednolity Plik Kontrolny
Po odpaleniu skryptu wjpk.py z parametrem init i wskazaniem pliku XML, dostaję plik o nazwie *-initupload.xml
Niestety w środku jest całkiem spory 48K html, a nie struktura pliku initupload.xml.
Wklejam zawartość:

Co robię źle?

apmszy...@gmail.com

unread,
Jul 25, 2016, 8:03:34 AM7/25/16
to Jednolity Plik Kontrolny, apmszy...@gmail.com
Mój błąd, ze strony projektu zapisałem plik initupload.tpl przez prawy klik i zapisz jako -> dostałem źródło strony zamiast właściwego pliku...

jnowin...@gmail.com

unread,
Aug 1, 2016, 2:09:20 AM8/1/16
to Jednolity Plik Kontrolny

waf

unread,
Aug 1, 2016, 3:36:19 AM8/1/16
to Jednolity Plik Kontrolny, jnowin...@gmail.com

Nic nie trzeba zmieniać. Żadne istotne zmiany do specyfikacji nie zostały wprowadzone.

Cały czas w wersji testowej nie działa procedura weryfikacji po stronie MF, 
wysyłka kończy się statusem 120.

WAF

walczak...@gmail.com

unread,
Aug 8, 2016, 1:53:10 PM8/8/16
to Jednolity Plik Kontrolny, apmszy...@gmail.com
Pytanie, jakieś porady jak taki self-signed certyfikat wygenerować za pomocą openssla? Próbowałem zwykłe pkcs12 ale szafir nie chce takiego klucza/ceryfikatu zaimportować (brak szyfrowania w danym certyfikacie).

Chciałbym udostępnić wersję skryptu powyżej napisaną w go, tak żeby dało się skompilować całość do jednej binarki, ale nie mogę dotestować rozwiązania do końca z racji braku tego własnie podpisu.

pozdrawiam,

waf

unread,
Aug 8, 2016, 4:05:04 PM8/8/16
to Jednolity Plik Kontrolny, apmszy...@gmail.com
Witam

Do podpisania pliku kontrolnego podpisem niekwalifikowanym np. self signed możesz użyć
JpkTaxApp udostępnionego w innym wątku.
Potrzebujesz tylko java 8 i JpkSignApp. Program ma już w sobie self signed certyfikat, 
więc swojego nie musisz generować. 
Oczywiście to będzie działać tylko w wersji testowej interfejsu (do kodu 120). 
W wersji produkcyjnej plik kontrolny jest odrzucany jako nie podpisany ważnym certyfikatem kwalifikowanym.

WF
Reply all
Reply to author
Forward
0 new messages