Zmiany w słownikach

Problem

Jeden z producentów oprogramowania zwrócił nam uwagę, że schema transakcji nakłada na atrybut /Dokument/TrescDokumentu/Karta/DanePodmiotu[charakterPodmiotu] ograniczenie wyrażenia regularnego [A-Z0-9]{4}.

Jednocześnie wartości w słowniku formularzy dla tego pola, miały małą literę jako ostatni znak.

To powodowało, że walidator xsd odrzucał transakcje z kodami ze strony, a walidator regułowy odrzucał transakcje z kodami zgodnymi z XSD.

Wprowadzone zmiany

Zmieniono w słowniku formularzy pisownię kodów charakteru podmiotu w transakcji na wielkie litery. Po poprawce A01a stało się A01A, A01b stało się A01B itd.

Do pobrania jest zaktualizowany walidator transakcji.

Kody transakcji w api oraz w karcie transakcji na stronie zostały poprawione.

Flow część 2

Uwaga odnośnie cURLa

Formaty plików kluczy i certyfikatów akceptowane przez cURL zależą od biblioteki kryptograficznej, z którą cURL został skompilowany.

Poniższe przykłady udało mi się uruchomić z:

  1. curl na Ubuntu 16.04 LTS:
    1
    2
    3
    curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
    Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets
  2. curl na Ubuntu 18.04 LTS:
    1
    2
    3
    4
    curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.0g zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
    Release-Date: 2018-01-24
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
    Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL
  3. Curl instalowanym wraz z git-bash na Windows 10 (choco install git):
    1
    2
    3
    4
    curl 7.64.0 (x86_64-w64-mingw32) libcurl/7.64.0 OpenSSL/1.1.1a (Schannel) zlib/1.2.11 libidn2/2.1.1 nghttp2/1.36.0
    Release-Date: 2019-02-06
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
    Features: AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz TLS-SRP HTTP2 HTTPS-proxy MultiSSL Metalink

Nie udało mi się uruchomić poniższych przykaładów z:

  1. curl na Oracle Linux 7:
    1
    2
    3
    curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.36 zlib/1.2.7 libidn/1.28 libssh2/1.4.3
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
    Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets
  2. curl na Windows 10 (choco install curl):
    1
    2
    3
    4
    curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
    Release-Date: [unreleased]
    Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
    Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL

Przykład nieudanej komunikacji:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
curl -v --key ksm-kmk.rsa.pem --cert ksm-kmk.pem https://test.giif.mofnet.gov.pl/api/rest2018/instytucje/
* Trying 145.237.235.44...
* TCP_NODELAY set
* Connected to test.giif.mofnet.gov.pl (145.237.235.44) port 443 (#0)
* schannel: SSL/TLS connection with test.giif.mofnet.gov.pl port 443 (step 1/3)
* schannel: checking server certificate revocation
* schannel: sending initial handshake data: sending 188 bytes...
* schannel: sent initial handshake data: sent 188 bytes
* schannel: SSL/TLS connection with test.giif.mofnet.gov.pl port 443 (step 2/3)
* schannel: failed to receive handshake, need more data
* schannel: SSL/TLS connection with test.giif.mofnet.gov.pl port 443 (step 2/3)
* schannel: encrypted data got 3347
* schannel: encrypted data buffer: offset 3347 length 4096
* schannel: a client certificate has been requested
* schannel: SSL/TLS connection with test.giif.mofnet.gov.pl port 443 (step 2/3)
* schannel: encrypted data buffer: offset 3347 length 4371
* schannel: sending next handshake data: sending 100 bytes...
* schannel: SSL/TLS connection with test.giif.mofnet.gov.pl port 443 (step 2/3)
* schannel: encrypted data got 290
* schannel: encrypted data buffer: offset 290 length 4371
* schannel: SSL/TLS handshake complete
* schannel: SSL/TLS connection with test.giif.mofnet.gov.pl port 443 (step 3/3)
* schannel: stored credential handle in session cache
> GET /api/rest2018/instytucje/ HTTP/1.1
> Host: test.giif.mofnet.gov.pl
> User-Agent: curl/7.55.1
> Accept: */*
>
* schannel: client wants to read 102400 bytes
* schannel: encdata_buffer resized 103424
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: encrypted data got 250
* schannel: encrypted data buffer: offset 250 length 103424
* schannel: decrypted data length: 221
* schannel: decrypted data added: 221
* schannel: decrypted data cached: offset 221 length 102400
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: decrypted data buffer: offset 221 length 102400
* schannel: schannel_recv cleanup
* schannel: decrypted data returned 221
* schannel: decrypted data buffer: offset 0 length 102400
< HTTP/1.1 401 401
< Date: Fri, 05 Apr 2019 10:55:39 GMT
< Server: Apache/2.4.38 (codeit) OpenSSL/1.1.1a
< Content-Type: application/octet-stream
< Content-Length: 57
<
No authorization header provided. Can't validate the JWT.* Connection #0 to host test.giif.mofnet.gov.pl left intact

W poprzednim odcinku

W części pierwszej:

  1. Utworzyliśmy instytucję obowiązaną o NIPie 0123456789.
  2. Przesłaliśmy żądanie wystawienia certyfikatu komunikacyjnego wraz z CSRem. W trakcie tworzenia CSRa, utworzyliśmy plik ksm-kmk.prv.pem z kluczem prywatnym.
  3. Pobraliśmy certyfikat komunikacyjny i zapisaliśmy go w pliku ksm-kmk.pem.

Pobieranie listy dostępnych instytucji

Zacznijmy od pobrania listy instytucji obowiązanych, do których certyfikat komunikacyjny daje nam dostęp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
curl -v --key ksm-kmk.prv.pem --cert ksm-kmk.pem \
--output lista_instytucji.xml \
https://test.giif.mofnet.gov.pl/api/rest2018/instytucje/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 145.237.235.44...
* Connected to test.giif.mofnet.gov.pl (145.237.235.44) port 443 (#0)
* found 148 certificates in /etc/ssl/certs/ca-certificates.crt
* found 592 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
* server certificate verification OK
* server certificate status verification SKIPPED
* common name: test.giif.mofnet.gov.pl (matched)
* server certificate expiration date OK
* server certificate activation date OK
* certificate public key: RSA
* certificate version: #3
* subject: CN=test.giif.mofnet.gov.pl
* start date: Tue, 26 Mar 2019 12:28:22 GMT
* expire date: Mon, 24 Jun 2019 12:28:22 GMT
* issuer: C=US,O=Let's Encrypt,CN=Let's Encrypt Authority X3
* compression: NULL
* ALPN, server accepted to use http/1.1
> GET /api/rest2018/instytucje/ HTTP/1.1
> Host: test.giif.mofnet.gov.pl
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 200
< Date: Fri, 05 Apr 2019 10:44:00 GMT
< Server: Apache/2.4.38 (codeit) OpenSSL/1.1.1a
< Content-Type: application/xml
< Content-Length: 1069
<
{ [1069 bytes data]
100 1069 100 1069 0 0 2628 0 --:--:-- --:--:-- --:--:-- 2633
* Connection #0 to host test.giif.mofnet.gov.pl left intact

Odpowiedź po sformatowaniu (xmllint -format lista_instytucji.xml) wygląda następująco:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:ListaInstytucji xmlns:ns2="http://crd.gov.pl/wzor/2018/10/19/5991/" xmlns:ns3="http://www.giif.mofnet.gov.pl/xsd/rest/instytucje20181218">
<Instytucja>
<ns2:Nazwa>Instytucja Przykładowa</ns2:Nazwa>
<ns2:FormaOrganizacyjna>17</ns2:FormaOrganizacyjna>
<ns2:NIP>0123456789</ns2:NIP>
<ns2:Adres>
<ns2:Kraj>PL</ns2:Kraj>
<ns2:Miejscowosc>Warszawa</ns2:Miejscowosc>
<ns2:Kod>00-916</ns2:Kod>
<ns2:Gmina>04241</ns2:Gmina>
<ns2:Ulica>Świętokrzyska</ns2:Ulica>
<ns2:NumerDomu>12</ns2:NumerDomu>
</ns2:Adres>
<ns2:RodzajInstytucji>451</ns2:RodzajInstytucji>
</Instytucja>
<Instytucja>
<ns2:Nazwa>TESTOWY_1</ns2:Nazwa>
<ns2:FormaOrganizacyjna>00</ns2:FormaOrganizacyjna>
<ns2:NIP>6770065406</ns2:NIP>
<ns2:Adres>
<ns2:Kraj>PL</ns2:Kraj>
<ns2:Miejscowosc>Testowo</ns2:Miejscowosc>
<ns2:Kod>01-777</ns2:Kod>
<ns2:Gmina>03040</ns2:Gmina>
<ns2:Ulica>Testowa</ns2:Ulica>
<ns2:NumerDomu>1</ns2:NumerDomu>
<ns2:NrLokalu/>
</ns2:Adres>
<ns2:RodzajInstytucji>0</ns2:RodzajInstytucji>
</Instytucja>
</ns3:ListaInstytucji>

Istotną informacją są NIPy instytucji, konieczne do tworzenia żądań wysyłania plików i pobierania UPO.

Pobieranie danych instytucji

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
curl -v --key ksm-kmk.rsa.pem --cert ksm-kmk.pem \
--output 0123456789.xml \
https://test.giif.mofnet.gov.pl/api/rest2018/instytucje/0123456789/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 145.237.235.44...
* TCP_NODELAY set
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to test.giif.mofnet.gov.pl (145.237.235.44) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
} [5 bytes data]
* (304) (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* (304) (IN), TLS handshake, Server hello (2):
{ [80 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [2573 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
* TLSv1.2 (IN), TLS handshake, Request CERT (13):
{ [375 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Certificate (11):
} [1185 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
* TLSv1.2 (OUT), TLS handshake, CERT verify (15):
} [264 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: CN=test.giif.mofnet.gov.pl
* start date: Jun 17 08:54:50 2019 GMT
* expire date: Sep 15 08:54:50 2019 GMT
* subjectAltName: host "test.giif.mofnet.gov.pl" matched cert's "test.giif.mofnet.gov.pl"
* issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
* SSL certificate verify ok.
} [5 bytes data]
> GET /api/rest2018/instytucje/0123456789/ HTTP/1.1
> Host: test.giif.mofnet.gov.pl
> User-Agent: curl/7.58.0
> Accept: */*
>
{ [5 bytes data]
< HTTP/1.1 200 200
< Date: Thu, 25 Jul 2019 09:35:19 GMT
< Server: Apache
< Content-Type: application/xml
< Content-Length: 1571
<
{ [1571 bytes data]
100 1571 100 1571 0 0 6600 0 --:--:-- --:--:-- --:--:-- 6573
* Connection #0 to host test.giif.mofnet.gov.pl left intact

Odpowiedź po sformatowaniu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns6:Dokument xmlns="http://crd.gov.pl/xml/schematy/struktura/2009/11/16/" xmlns:ns2="http://crd.gov.pl/xml/schematy/meta/2009/11/16/" xmlns:ns3="http://crd.gov.pl/xml/schematy/instytucja/2009/11/16/" xmlns:ns4="http://crd.gov.pl/xml/schematy/adres/2009/11/09/" xmlns:ns5="http://crd.gov.pl/xml/schematy/osoba/2009/11/16/" xmlns:ns6="http://crd.gov.pl/wzor/2018/10/19/5991/" xmlns:ns7="http://crd.gov.pl/wzor/2018/10/19/5992/" xmlns:ns8="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2018/10/10/giif/typy/" xmlns:ns9="http://crd.gov.pl/wzor/2018/10/19/5993/" xmlns:ns10="http://crd.gov.pl/wzor/2018/10/19/5995/" xmlns:ns11="http://crd.gov.pl/wzor/2018/10/30/6031/" xmlns:ns12="http://www.giif.mofnet.gov.pl/xsd/transakcje/2019/01/11/celnicy">
<ns6:OpisDokumentu/>
<ns6:DaneDokumentu/>
<ns6:TrescDokumentu rodzaj="inny" format="application/xml" kodowanie="XML">
<ns6:Karta aktualizacja="true">
<ns6:Nazwa>Instytucja testowa</ns6:Nazwa>
<ns6:FormaOrganizacyjna>17</ns6:FormaOrganizacyjna>
<ns6:NIP>0123456789</ns6:NIP>
<ns6:Adres>
<ns6:Kraj>PL</ns6:Kraj>
<ns6:Miejscowosc>Warszawa</ns6:Miejscowosc>
<ns6:Kod>00-001</ns6:Kod>
<ns6:Gmina>03285</ns6:Gmina>
<ns6:Ulica>Testowa</ns6:Ulica>
<ns6:NumerDomu>15</ns6:NumerDomu>
</ns6:Adres>
<ns6:OsobaOdpowiedzialna>
<ns6:ImiePierwsze>Tester</ns6:ImiePierwsze>
<ns6:Nazwisko>Testowy</ns6:Nazwisko>
<ns6:Telefon>123456785</ns6:Telefon>
<ns6:Email>test@example.com</ns6:Email>
</ns6:OsobaOdpowiedzialna>
<ns6:RodzajInstytucji>451</ns6:RodzajInstytucji>
</ns6:Karta>
</ns6:TrescDokumentu>
</ns6:Dokument>

Flow część 1

W najbliższych kilku postach postaram się zaprezentować flow.

Do prezentacji będę korzystał z głównie z narzędzi linii poleceń.

Początkowo zamierzałem wykorzystać polecenie cms z pakietu OpenSSL do podpisywania plików, jednakże wersja stabilna nie tworzy dokumentów zgodnych z CAdES, a wersja rozwojowa, która ma tryb zgodności z CAdES nie współpracuje jeszcze z engine_pkcs11 co uniemożliwia skorzystanie z podpisu na karcie kryptograficznej.

Przygotowania

proCertum SmartSign

Niektóre żądania do API wymagają podpisania treści żądania podpisem kwalifikowanym. W tym celu wykorzystam oprogramowanie proCertum SmartSign.

Składany podpis musi być w formacie CAdES/ETSI, podpis musi otaczć dokument, znakowanie czasem nie jest wymagane.

W proCertum SmartSign taką konfigurację uzyskałem wybierając opcje:

  1. Signature format: CAdES/ETSI
  2. Signature type: Internal signature
  3. Digest function: SHA-256
  4. Additional signature options:
    • Signature profile: “Do not include any additional information (BES)”.

cURL

Używam curl w domyślej wersji zainstalowanej w Ubuntu 18.04 LTS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
ksm@ksm:~/flow/rejestracja$ curl --version
curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.0g zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
Release-Date: 2018-01-24
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL
```

# Rejestracja instytucji obowiązanej

Przygotowałem plik `rejestracja.xml` z danymi instytucji:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<Dokument xmlns="http://crd.gov.pl/wzor/2018/10/19/5991/">
<OpisDokumentu/>
<DaneDokumentu/>
<TrescDokumentu rodzaj="inny" format="text/xml" kodowanie="XML">
<Karta aktualizacja="false">
<Nazwa>Instytucja Przykładowa</Nazwa>
<FormaOrganizacyjna>17</FormaOrganizacyjna>
<NIP>0123456789</NIP>
<Adres>
<Kraj>PL</Kraj>
<Miejscowosc>Warszawa</Miejscowosc>
<Kod>00-916</Kod>
<Gmina>04241</Gmina>
<Ulica>Świętokrzyska</Ulica>
<NumerDomu>12</NumerDomu>
</Adres>
<OsobaOdpowiedzialna>
<ImiePierwsze>Tester</ImiePierwsze>
<Nazwisko>Testowy</Nazwisko>
<Stanowisko>tester</Stanowisko>
<Telefon>226945555</Telefon>
<Email>tester@example.com</Email>
</OsobaOdpowiedzialna>
<RodzajInstytucji>451</RodzajInstytucji>
</Karta>
</TrescDokumentu>
</Dokument>

Plik ten podpisałem, otrzymując plik binarny rejestracja.xml.sig. Hexdump tego pliku zaczyna się następująco:

1
2
3
4
5
6
7
8
9
10
ksm@ksm-7530:~/tmp/flow/rejestracja$ hd rejestracja.xml.sig 
00000000 30 80 06 09 2a 86 48 86 f7 0d 01 07 02 a0 80 30 |0...*.H........0|
00000010 80 02 01 01 31 0f 30 0d 06 09 60 86 48 01 65 03 |....1.0...`.H.e.|
00000020 04 02 01 05 00 30 80 06 09 2a 86 48 86 f7 0d 01 |.....0...*.H....|
00000030 07 01 a0 80 24 80 04 82 03 a5 3c 3f 78 6d 6c 20 |....$.....<?xml |
00000040 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 65 6e |version="1.0" en|
00000050 63 6f 64 69 6e 67 3d 22 55 54 46 2d 38 22 3f 3e |coding="UTF-8"?>|
00000060 0a 3c 44 6f 6b 75 6d 65 6e 74 20 78 6d 6c 6e 73 |.<Dokument xmlns|
00000070 3d 22 68 74 74 70 3a 2f 2f 63 72 64 2e 67 6f 76 |="http://crd.gov|
00000080 2e 70 6c 2f 77 7a 6f 72 2f 32 30 31 38 2f 31 30 |.pl/wzor/2018/10|

A tak wygląda struktura podpisanego pliku:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
ksm@ksm-7530:~/tmp/flow/rejestracja$ openssl cms -inform DER -cmsout -noout -print -in rejestracja.xml.sig 
CMS_ContentInfo:
contentType: pkcs7-signedData (1.2.840.113549.1.7.2)
d.signedData:
version: 1
digestAlgorithms:
algorithm: sha256 (2.16.840.1.101.3.4.2.1)
parameter: NULL
encapContentInfo:
eContentType: pkcs7-data (1.2.840.113549.1.7.1)
eContent:
0000 - 3c 3f 78 6d 6c 20 76 65-72 73 69 6f 6e 3d 22 <?xml version="
000f - 31 2e 30 22 20 65 6e 63-6f 64 69 6e 67 3d 22 1.0" encoding="
001e - 55 54 46 2d 38 22 3f 3e-0a 3c 44 6f 6b 75 6d UTF-8"?>.<Dokum
002d - 65 6e 74 20 78 6d 6c 6e-73 3d 22 68 74 74 70 ent xmlns="http
003c - 3a 2f 2f 63 72 64 2e 67-6f 76 2e 70 6c 2f 77 ://crd.gov.pl/w
004b - 7a 6f 72 2f 32 30 31 38-2f 31 30 2f 31 39 2f zor/2018/10/19/
005a - 35 39 39 31 2f 22 3e 0a-20 20 3c 4f 70 69 73 5991/">. <Opis
0069 - 44 6f 6b 75 6d 65 6e 74-75 2f 3e 0a 20 20 3c Dokumentu/>. <
0078 - 44 61 6e 65 44 6f 6b 75-6d 65 6e 74 75 2f 3e DaneDokumentu/>
0087 - 0a 20 20 3c 54 72 65 73-63 44 6f 6b 75 6d 65 . <TrescDokume
0096 - 6e 74 75 20 72 6f 64 7a-61 6a 3d 22 69 6e 6e ntu rodzaj="inn
00a5 - 79 22 20 66 6f 72 6d 61-74 3d 22 74 65 78 74 y" format="text
00b4 - 2f 78 6d 6c 22 20 6b 6f-64 6f 77 61 6e 69 65 /xml" kodowanie
00c3 - 3d 22 58 4d 4c 22 3e 0a-20 20 20 20 3c 4b 61 ="XML">. <Ka
00d2 - 72 74 61 20 61 6b 74 75-61 6c 69 7a 61 63 6a rta aktualizacj
00e1 - 61 3d 22 66 61 6c 73 65-22 3e 0a 20 20 20 20 a="false">.
00f0 - 20 20 3c 4e 61 7a 77 61-3e 49 6e 73 74 79 74 <Nazwa>Instyt
00ff - 75 63 6a 61 20 50 72 7a-79 6b c5 82 61 64 6f ucja Przyk..ado
010e - 77 61 3c 2f 4e 61 7a 77-61 3e 0a 20 20 20 20 wa</Nazwa>.
011d - 20 20 3c 46 6f 72 6d 61-4f 72 67 61 6e 69 7a <FormaOrganiz
012c - 61 63 79 6a 6e 61 3e 31-37 3c 2f 46 6f 72 6d acyjna>17</Form
013b - 61 4f 72 67 61 6e 69 7a-61 63 79 6a 6e 61 3e aOrganizacyjna>
014a - 0a 20 20 20 20 20 20 3c-4e 49 50 3e 30 31 32 . <NIP>012
0159 - 33 34 35 36 37 38 39 3c-2f 4e 49 50 3e 0a 20 3456789</NIP>.
0168 - 20 20 20 20 20 3c 41 64-72 65 73 3e 0a 20 20 <Adres>.
0177 - 20 20 20 20 20 20 3c 4b-72 61 6a 3e 50 4c 3c <Kraj>PL<
0186 - 2f 4b 72 61 6a 3e 0a 20-20 20 20 20 20 20 20 /Kraj>.
0195 - 3c 4d 69 65 6a 73 63 6f-77 6f 73 63 3e 57 61 <Miejscowosc>Wa
01a4 - 72 73 7a 61 77 61 3c 2f-4d 69 65 6a 73 63 6f rszawa</Miejsco
01b3 - 77 6f 73 63 3e 0a 20 20-20 20 20 20 20 20 3c wosc>. <
01c2 - 4b 6f 64 3e 30 30 2d 39-31 36 3c 2f 4b 6f 64 Kod>00-916</Kod
01d1 - 3e 0a 20 20 20 20 20 20-20 20 3c 47 6d 69 6e >. <Gmin
01e0 - 61 3e 30 34 32 34 31 3c-2f 47 6d 69 6e 61 3e a>04241</Gmina>
01ef - 0a 20 20 20 20 20 20 20-20 3c 55 6c 69 63 61 . <Ulica
01fe - 3e c5 9a 77 69 c4 99 74-6f 6b 72 7a 79 73 6b >..wi..tokrzysk
020d - 61 3c 2f 55 6c 69 63 61-3e 0a 20 20 20 20 20 a</Ulica>.
021c - 20 20 20 3c 4e 75 6d 65-72 44 6f 6d 75 3e 31 <NumerDomu>1
022b - 32 3c 2f 4e 75 6d 65 72-44 6f 6d 75 3e 0a 20 2</NumerDomu>.
023a - 20 20 20 20 20 3c 2f 41-64 72 65 73 3e 0a 20 </Adres>.
0249 - 20 20 20 20 20 3c 4f 73-6f 62 61 4f 64 70 6f <OsobaOdpo
0258 - 77 69 65 64 7a 69 61 6c-6e 61 3e 0a 20 20 20 wiedzialna>.
0267 - 20 20 20 20 20 3c 49 6d-69 65 50 69 65 72 77 <ImiePierw
0276 - 73 7a 65 3e 54 65 73 74-65 72 3c 2f 49 6d 69 sze>Tester</Imi
0285 - 65 50 69 65 72 77 73 7a-65 3e 0a 20 20 20 20 ePierwsze>.
0294 - 20 20 20 20 3c 4e 61 7a-77 69 73 6b 6f 3e 54 <Nazwisko>T
02a3 - 65 73 74 6f 77 79 3c 2f-4e 61 7a 77 69 73 6b estowy</Nazwisk
02b2 - 6f 3e 0a 20 20 20 20 20-20 20 20 3c 53 74 61 o>. <Sta
02c1 - 6e 6f 77 69 73 6b 6f 3e-74 65 73 74 65 72 3c nowisko>tester<
02d0 - 2f 53 74 61 6e 6f 77 69-73 6b 6f 3e 0a 20 20 /Stanowisko>.
02df - 20 20 20 20 20 20 3c 54-65 6c 65 66 6f 6e 3e <Telefon>
02ee - 32 32 36 39 34 35 35 35-35 3c 2f 54 65 6c 65 226945555</Tele
02fd - 66 6f 6e 3e 0a 20 20 20-20 20 20 20 20 3c 45 fon>. <E
030c - 6d 61 69 6c 3e 74 65 73-74 65 72 40 65 78 61 mail>tester@exa
031b - 6d 70 6c 65 2e 63 6f 6d-3c 2f 45 6d 61 69 6c mple.com</Email
032a - 3e 0a 20 20 20 20 20 20-3c 2f 4f 73 6f 62 61 >. </Osoba
0339 - 4f 64 70 6f 77 69 65 64-7a 69 61 6c 6e 61 3e Odpowiedzialna>
0348 - 0a 20 20 20 20 20 20 3c-52 6f 64 7a 61 6a 49 . <RodzajI
0357 - 6e 73 74 79 74 75 63 6a-69 3e 34 35 31 3c 2f nstytucji>451</
0366 - 52 6f 64 7a 61 6a 49 6e-73 74 79 74 75 63 6a RodzajInstytucj
0375 - 69 3e 0a 20 20 20 20 3c-2f 4b 61 72 74 61 3e i>. </Karta>
0384 - 0a 20 20 3c 2f 54 72 65-73 63 44 6f 6b 75 6d . </TrescDokum
0393 - 65 6e 74 75 3e 0a 3c 2f-44 6f 6b 75 6d 65 6e entu>.</Dokumen
03a2 - 74 3e 0a t>.
certificates:
d.certificate:
cert_info:
version: 2
serialNumber: 34381343500300685680795199330219258600
signature:
algorithm: sha256WithRSAEncryption (1.2.840.113549.1.1.11)
parameter: NULL
issuer: C=PL, O=Asseco Data Systems S.A., CN=Certum QCA 2017/2.5.4.97=VATPL-5170359458
validity:
notBefore: Aug 28 09:52:08 2018 GMT
notAfter: Aug 27 09:52:08 2020 GMT
subject: **Dane użytkownika podpisującego**
key:
algor:
algorithm: rsaEncryption (1.2.840.113549.1.1.1)
parameter: NULL
public_key: (0 unused bits)
0000 - 30 82 01 0a 02 82 01 01-00 b6 71 b9 7d 89 0.........q.}.
000e - 52 e9 fc f2 f1 eb 08 49-8c af 7a 74 88 14 R......I..zt..
001c - 73 56 8b e6 8a 43 ae 33-43 b3 37 85 f5 08 sV...C.3C.7...
002a - 94 35 d2 4e 5b 5a 48 ed-b6 c2 dc 81 7e c9 .5.N[ZH.....~.
0038 - 4c 1d 8a 06 3d ba 6c 55-50 23 af c8 1a 94 L...=.lUP#....
0046 - 47 e8 c3 04 12 80 96 e7-d0 80 11 18 5d 25 G...........]%
0054 - ac a9 0f 12 75 54 43 d6-2a a5 04 6f 70 5d ....uTC.*..op]
0062 - 35 2a 54 10 2e 21 b8 f9-b9 71 94 68 bb c2 5*T..!...q.h..
0070 - 67 47 61 5c 71 cd 4b 64-ff 03 e6 2c 7d 3b gGa\q.Kd...,};
007e - 96 5b d8 a7 80 ee 29 78-98 37 64 a4 a7 8e .[....)x.7d...
008c - 01 1c ac 51 04 10 22 e4-c6 2d 7d 1d 53 42 ...Q.."..-}.SB
009a - 62 d6 9c ed 39 3e 33 4b-c8 bd c6 98 f9 54 b...9>3K.....T
00a8 - 76 ae 65 4b 96 48 8a da-15 27 49 a5 cc fd v.eK.H...'I...
00b6 - 85 27 27 6f 50 24 0e 5a-5c 12 ea 91 37 96 .''oP$.Z\...7.
00c4 - 70 0b fc 7e aa 14 2c 97-46 b7 46 2a 19 e1 p..~..,.F.F*..
00d2 - d4 1d 57 f8 93 28 f5 de-37 ad ab c8 b3 79 ..W..(..7....y
00e0 - a8 e6 d7 39 66 94 43 aa-eb cc c1 f3 74 77 ...9f.C.....tw
00ee - 9c 55 9e 18 d7 1e 17 f0-0d 47 0e a1 67 f5 .U.......G..g.
00fc - 5b 74 35 25 a1 1e 2d 8e-5b ac 8e 9b b1 02 [t5%..-.[.....
010a - 03 01 00 01 ....
issuerUID: <ABSENT>
subjectUID: <ABSENT>
extensions:
object: X509v3 Basic Constraints (2.5.29.19)
critical: TRUE
value:
0000 - 30 0
0002 - <SPACES/NULS>

object: X509v3 CRL Distribution Points (2.5.29.31)
critical: BOOL ABSENT
value:
0000 - 30 2d 30 2b a0 29 a0 27-86 25 68 74 74 0-0+.).'.%htt
000d - 70 3a 2f 2f 71 63 61 2e-63 72 6c 2e 63 p://qca.crl.c
001a - 65 72 74 75 6d 2e 70 6c-2f 71 63 61 5f ertum.pl/qca_
0027 - 32 30 31 37 2e 63 72 6c- 2017.crl

object: Authority Information Access (1.3.6.1.5.5.7.1.1)
critical: BOOL ABSENT
value:
0000 - 30 64 30 2c 06 08 2b 06-01 05 05 07 30 0d0,..+.....0
000d - 01 86 20 68 74 74 70 3a-2f 2f 71 63 61 .. http://qca
001a - 2d 32 30 31 37 2e 71 6f-63 73 70 2d 63 -2017.qocsp-c
0027 - 65 72 74 75 6d 2e 63 6f-6d 30 34 06 08 ertum.com04..
0034 - 2b 06 01 05 05 07 30 02-86 28 68 74 74 +.....0..(htt
0041 - 70 3a 2f 2f 72 65 70 6f-73 69 74 6f 72 p://repositor
004e - 79 2e 63 65 72 74 75 6d-2e 70 6c 2f 71 y.certum.pl/q
005b - 63 61 5f 32 30 31 37 2e-63 65 72 ca_2017.cer

object: X509v3 Authority Key Identifier (2.5.29.35)
critical: BOOL ABSENT
value:
0000 - 30 16 80 14 27 f1 d8 4e-60 50 68 b6 61 0...'..N`Ph.a
000d - fe 68 1b 28 6c 6d e4 0b-73 09 4d .h.(lm..s.M

object: X509v3 Subject Key Identifier (2.5.29.14)
critical: BOOL ABSENT
value:
0000 - 04 14 63 c6 43 cd 2a 1a-bf 98 46 7e d1 ..c.C.*...F~.
000d - 45 a8 3f 60 4e 3d 0c 9d-4c E.?`N=..L

object: X509v3 Key Usage (2.5.29.15)
critical: TRUE
value:
0000 - 03 02 06 c0 ....

object: X509v3 Certificate Policies (2.5.29.32)
critical: BOOL ABSENT
value:
0000 - 30 82 01 6e 30 09 06 07-04 00 8b ec 40 0..n0.......@
000d - 01 02 30 82 01 5f 06 0c-2a 84 68 01 86 ..0.._..*.h..
001a - f6 77 02 04 01 0c 01 30-82 01 4d 30 2d .w.....0..M0-
0027 - 06 08 2b 06 01 05 05 07-02 01 16 21 68 ..+........!h
0034 - 74 74 70 3a 2f 2f 77 77-77 2e 63 65 72 ttp://www.cer
0041 - 74 75 6d 2e 70 6c 2f 72-65 70 6f 7a 79 tum.pl/repozy
004e - 74 6f 72 69 75 6d 30 82-01 1a 06 08 2b torium0.....+
005b - 06 01 05 05 07 02 02 30-82 01 0c 30 1f .......0...0.
0068 - 16 18 41 73 73 65 63 6f-20 44 61 74 61 ..Asseco Data
0075 - 20 53 79 73 74 65 6d 73-20 53 2e 41 2e Systems S.A.
0082 - 30 03 02 01 01 0c 81 e8-43 65 72 74 75 0.......Certu
008f - 6d 20 51 75 61 6c 69 66-69 65 64 20 43 m Qualified C
009c - 65 72 74 69 66 69 63 61-74 65 20 50 6f ertificate Po
00a9 - 6c 69 63 79 20 66 6f 72-20 50 68 79 73 licy for Phys
00b6 - 69 63 61 6c 20 61 6e 64-20 4e 61 74 75 ical and Natu
00c3 - 72 61 6c 20 50 65 72 73-6f 6e 73 20 77 ral Persons w
00d0 - 69 74 68 20 53 65 63 75-72 65 20 53 69 ith Secure Si
00dd - 67 6e 61 74 75 72 65 20-43 72 65 61 74 gnature Creat
00ea - 69 6f 6e 20 44 65 76 69-63 65 20 28 53 ion Device (S
00f7 - 53 43 44 29 2e 20 4d 6f-72 65 20 64 65 SCD). More de
0104 - 74 61 69 6c 65 64 20 69-6e 66 6f 72 6d tailed inform
0111 - 61 74 69 6f 6e 20 63 61-6e 20 62 65 20 ation can be
011e - 66 6f 75 6e 64 20 69 6e-20 74 68 65 20 found in the
012b - 43 65 72 74 69 66 69 63-61 74 65 20 50 Certificate P
0138 - 6f 6c 69 63 79 20 31 2e-33 2e 36 2e 31 olicy 1.3.6.1
0145 - 2e 34 2e 31 2e 33 38 36-30 2e 31 2e 32 .4.1.3860.1.2
0152 - 2e 31 30 34 2e 31 2e 30-20 6f 6e 20 68 .104.1.0 on h
015f - 74 74 70 3a 2f 2f 77 77-77 2e 63 65 72 ttp://www.cer
016c - 74 75 6d 2e 65 75 tum.eu

object: qcStatements (1.3.6.1.5.5.7.1.3)
critical: BOOL ABSENT
value:
0000 - 30 81 b2 30 08 06 06 04-00 8e 46 01 01 0..0......F..
000d - 30 08 06 06 04 00 8e 46-01 04 30 81 86 0......F..0..
001a - 06 06 04 00 8e 46 01 05-30 7c 30 3c 16 .....F..0|0<.
0027 - 36 68 74 74 70 73 3a 2f-2f 72 65 70 6f 6https://repo
0034 - 73 69 74 6f 72 79 2e 63-65 72 74 75 6d sitory.certum
0041 - 2e 70 6c 2f 50 44 53 2f-43 65 72 74 75 .pl/PDS/Certu
004e - 6d 5f 51 43 41 2d 50 44-53 5f 45 4e 2e m_QCA-PDS_EN.
005b - 70 64 66 13 02 65 6e 30-3c 16 36 68 74 pdf..en0<.6ht
0068 - 74 70 73 3a 2f 2f 72 65-70 6f 73 69 74 tps://reposit
0075 - 6f 72 79 2e 63 65 72 74-75 6d 2e 70 6c ory.certum.pl
0082 - 2f 50 44 53 2f 43 65 72-74 75 6d 5f 51 /PDS/Certum_Q
008f - 43 41 2d 50 44 53 5f 50-4c 2e 70 64 66 CA-PDS_PL.pdf
009c - 13 02 70 6c 30 13 06 06-04 00 8e 46 01 ..pl0......F.
00a9 - 06 30 09 06 07 04 00 8e-46 01 06 01 .0......F...
sig_alg:
algorithm: sha256WithRSAEncryption (1.2.840.113549.1.1.11)
parameter: NULL
signature: (0 unused bits)
0000 - a0 1f 4d 7a cb b6 43 4e-02 65 d1 cd 07 5b 17 ..Mz..CN.e...[.
000f - 70 b5 bf 4c 14 93 fd cf-26 38 3a 16 db 30 80 p..L....&8:..0.
001e - 2a bf 10 85 c0 2b 77 1c-1a 66 7e ce cb 45 e9 *....+w..f~..E.
002d - ab ba 54 da e8 a5 f3 95-ab 49 ed 7f c1 c3 5d ..T......I....]
003c - e2 32 b2 a6 20 f6 31 b3-f5 cc a4 d5 fb bf 71 .2.. .1.......q
004b - 37 fd 2a a2 af f4 3d 02-97 25 e1 53 a6 8a 2d 7.*...=..%.S..-
005a - ec dd 04 f1 6b d7 ce d7-85 6a 32 14 15 62 c4 ....k....j2..b.
0069 - d3 be c3 a4 cf e8 0c a8-96 78 34 33 66 bf e8 .........x43f..
0078 - 6b 1a a9 b4 90 35 2a a4-94 f8 04 07 d1 bb a0 k....5*........
0087 - 11 51 df 96 d5 43 3b 56-3f 3c 6b d3 53 2e dd .Q...C;V?<k.S..
0096 - a3 05 8c 0a 47 de dc 04-55 8d 68 e6 ed a5 78 ....G...U.h...x
00a5 - 45 e3 78 83 26 b6 6e b8-09 e6 02 a1 10 fd 65 E.x.&.n.......e
00b4 - 91 39 79 2c 43 c2 cb e1-ae f8 c3 4b 72 1a 23 .9y,C......Kr.#
00c3 - a0 f3 67 c3 1d 46 57 05-3a ec cd fa ef d3 5f ..g..FW.:....._
00d2 - b3 2d bb cc c1 49 75 c8-8e 75 06 46 30 82 dd .-...Iu..u.F0..
00e1 - e8 5a a4 4c a3 51 3d 30-4b a0 f7 75 9b 86 b5 .Z.L.Q=0K..u...
00f0 - b5 65 25 e7 d2 21 f6 f8-3b d2 f8 4f fc 95 f0 .e%..!..;..O...
00ff - 17 4d fa 84 3b 3a 57 80-a0 b6 61 5b c2 b0 c1 .M..;:W...a[...
010e - 01 62 11 d7 c9 09 ff 02-d1 fc 53 df 98 4e f3 .b........S..N.
011d - a1 97 b7 39 28 6f ab aa-ee ad 73 5f 1e 7b df ...9(o....s_.{.
012c - 12 27 17 47 00 50 9e 69-31 83 76 a2 7b d9 25 .'.G.P.i1.v.{.%
013b - 0b 0b 5d b8 de 9e 36 46-f7 84 1f 53 36 57 f5 ..]...6F...S6W.
014a - 3f fe 20 55 9e 58 63 5f-bf 26 de d0 a6 22 30 ?. U.Xc_.&..."0
0159 - bc 6c fd 13 15 c8 47 d9-7c 6d ec cf 1a 08 e5 .l....G.|m.....
0168 - 88 45 0f ff b9 8d bb df-a8 5b f2 89 b1 f0 57 .E.......[....W
0177 - ad 39 3e 3e d0 4e c4 48-19 6f 08 ef 1c b1 18 .9>>.N.H.o.....
0186 - 22 9b e4 8d 3b d2 9a 7a-3c 84 ae 24 d9 da 91 "...;..z<..$...
0195 - c1 85 36 7c 50 69 45 0c-17 5c 24 a7 04 6e 54 ..6|PiE..\$..nT
01a4 - 7b bc 55 86 7e 7f 31 63-78 d8 53 fd e2 d6 c6 {.U.~.1cx.S....
01b3 - f6 69 73 de da a6 34 de-50 68 8d 43 12 76 b5 .is...4.Ph.C.v.
01c2 - 4a 1f 03 fb 0f d6 48 f9-ba 0b ac 93 48 ec 5b J.....H.....H.[
01d1 - 84 f3 c2 7a d0 36 19 a0-a2 3b 28 76 86 48 4f ...z.6...;(v.HO
01e0 - 03 33 98 78 a5 49 cd cd-a9 57 60 11 6d 6a 15 .3.x.I...W`.mj.
01ef - 3b 13 51 cb d4 8a bb 3d-ff 34 cd d6 a3 67 54 ;.Q....=.4...gT
01fe - d0 32 .2
crls:
<EMPTY>
signerInfos:
version: 1
d.issuerAndSerialNumber:
issuer: C=PL, O=Asseco Data Systems S.A., CN=Certum QCA 2017/2.5.4.97=VATPL-5170359458
serialNumber: 34381343500300685680795199330219258600
digestAlgorithm:
algorithm: sha256 (2.16.840.1.101.3.4.2.1)
parameter: NULL
signedAttrs:
object: id-smime-aa-ets-sigPolicyId (1.2.840.113549.1.9.16.2.15)
value.set:
NULL

object: contentType (1.2.840.113549.1.9.3)
value.set:
OBJECT:pkcs7-data (1.2.840.113549.1.7.1)

object: signingTime (1.2.840.113549.1.9.5)
value.set:
UTCTIME:Apr 4 10:03:46 2019 GMT

object: messageDigest (1.2.840.113549.1.9.4)
value.set:
OCTET STRING:
0000 - dd bb 85 f5 a4 68 6b 19-cd 28 2e c5 7d .....hk..(..}
000d - 79 6c b2 0c 6a fb f8 1c-96 92 e2 fb 4f yl..j.......O
001a - fc 2f 62 e7 f9 cf ./b...

object: id-smime-aa-contentHint (1.2.840.113549.1.9.16.2.4)
value.set:
SEQUENCE:
0:d=0 hl=3 l= 138 cons: SEQUENCE
3:d=1 hl=2 l= 122 prim: UTF8STRING :MIME-Version: 1.0
Content-Type: text/xml
Content-Transfer-Encoding: binary
Content-Disposition: filename="rejestracja.xml"
127:d=1 hl=2 l= 12 prim: OBJECT :1.2.616.1.113527.3.1.1.3.1

object: id-smime-aa-signingCertificate (1.2.840.113549.1.9.16.2.12)
value.set:
SEQUENCE:
0:d=0 hl=3 l= 155 cons: SEQUENCE
3:d=1 hl=3 l= 152 cons: SEQUENCE
6:d=2 hl=3 l= 149 cons: SEQUENCE
9:d=3 hl=2 l= 20 prim: OCTET STRING [HEX DUMP]:FF270BC792ACD96F44BB5AADF9EF14811E87C5BB
31:d=3 hl=2 l= 125 cons: SEQUENCE
33:d=4 hl=2 l= 105 cons: SEQUENCE
35:d=5 hl=2 l= 103 cons: cont [ 4 ]
37:d=6 hl=2 l= 101 cons: SEQUENCE
39:d=7 hl=2 l= 11 cons: SET
41:d=8 hl=2 l= 9 cons: SEQUENCE
43:d=9 hl=2 l= 3 prim: OBJECT :countryName
48:d=9 hl=2 l= 2 prim: PRINTABLESTRING :PL
52:d=7 hl=2 l= 33 cons: SET
54:d=8 hl=2 l= 31 cons: SEQUENCE
56:d=9 hl=2 l= 3 prim: OBJECT :organizationName
61:d=9 hl=2 l= 24 prim: UTF8STRING :Asseco Data Systems S.A.
87:d=7 hl=2 l= 24 cons: SET
89:d=8 hl=2 l= 22 cons: SEQUENCE
91:d=9 hl=2 l= 3 prim: OBJECT :commonName
96:d=9 hl=2 l= 15 prim: UTF8STRING :Certum QCA 2017
113:d=7 hl=2 l= 25 cons: SET
115:d=8 hl=2 l= 23 cons: SEQUENCE
117:d=9 hl=2 l= 3 prim: OBJECT :2.5.4.97
122:d=9 hl=2 l= 16 prim: UTF8STRING :VATPL-5170359458
140:d=4 hl=2 l= 16 prim: INTEGER :19DD9B1C1A0EC71F3CA16588C318F2E8
signatureAlgorithm:
algorithm: rsaEncryption (1.2.840.113549.1.1.1)
parameter: NULL
signature:
0000 - 89 ab df 36 aa e9 3c 1d-fc b7 9b e8 92 ee 4e ...6..<.......N
000f - ed 4e ee 97 f9 99 7c 4c-bd 86 63 0a 6e e7 62 .N....|L..c.n.b
001e - 20 1c 7e 23 5b e4 cb a3-29 ae 8d 43 50 fd 4e .~#[...)..CP.N
002d - c9 1b 28 97 e2 dd 0a 6b-05 ea 15 19 cd 8d 8e ..(....k.......
003c - 94 d6 52 15 7d 4f a2 6f-6d c6 33 f7 20 be b3 ..R.}O.om.3. ..
004b - cd 89 d2 07 b4 94 c2 07-41 7e 2b 4d 5e ad 94 ........A~+M^..
005a - 52 3f 06 2c ac 20 55 7e-8b 87 10 00 88 f7 fa R?.,. U~.......
0069 - ea 46 a0 76 de 0f 72 ab-2e 52 63 da d0 a7 7c .F.v..r..Rc...|
0078 - a4 56 35 07 c8 c3 79 11-24 69 4b 15 a7 fa 4a .V5...y.$iK...J
0087 - cd 5d f3 3a 45 40 77 35-e0 ca 6a 43 6a 9b b2 .].:E@w5..jCj..
0096 - 8e a9 d8 e8 12 59 54 84-7e 37 73 d1 4f 07 3f .....YT.~7s.O.?
00a5 - 36 5b 41 0d 0d 0a a0 f2-c1 d2 a6 97 f1 f3 3c 6[A...........<
00b4 - 66 6e 2d 73 ca d4 89 71-a4 26 53 1c 53 2f 1d fn-s...q.&S.S/.
00c3 - 0c 39 d0 2b e6 3e f0 7c-1c d7 61 ff 3d a7 d6 .9.+.>.|..a.=..
00d2 - 88 7b da 2c 73 6b ba e2-9f af a8 14 ea f5 1e .{.,sk.........
00e1 - 31 bf a3 54 56 6a 1a a5-ea 1b 90 ca b5 96 29 1..TVj........)
00f0 - 71 75 19 e0 a7 4b a0 bd-65 83 58 36 c4 4d a6 qu...K..e.X6.M.
00ff - bd .
unsignedAttrs:
<EMPTY>

Tak przygotowany plik wysyłam ma stronę.

1
2
3
4
curl --data-binary @rejestracja.xml.sig \
--header 'Content-Type: application/xml' \
https://test.giif.mofnet.gov.pl/api/rest2018/instytucje/
Przyjęto zgłoszenie Instytucji Obowiązanej bez CSRa.

W systemie produkcyjnym oznaczałoby to, że zgłoszenie instytucji zostało zarejestrowane i oczekuje na zatwierdzenie przez pracownika Ministerstwa Finansów.

W systemie testowym rejestracja jest automatyczna.

Utworzenie certyfikatu komunikacyjnego

Generowanie CSRa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
openssl req -out ksm-kmk.csr -new -newkey rsa:2048 -nodes -keyout ksm-kmk.prv.pem
Generating a 2048 bit RSA private key
................................................................+++
............+++
unable to write 'random state'
writing new private key to 'ksm-kmk.prv.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:.
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:.
Organization Name (eg, company) [Internet Widgits Pty Ltd]:.
Organizational Unit Name (eg, section) []:.
Common Name (e.g. server FQDN or YOUR name) []:ksm-kmk
Email Address []:.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Wygenerowany CSR:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat ksm-kmk.csr
-----BEGIN CERTIFICATE REQUEST-----
MIICVzCCAT8CAQAwEjEQMA4GA1UEAwwHa3NtLWttazCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAK48BF8GjdKp/9c9ujVl5xBPcsm/c9sfp9U/MqL2hekF
wG6v9UXw8S8GRCG1rFbIKlKgPxQQWBcxzpJ9eWJ512J+kLTBLWYI2DAvLZiCnVFn
NH8Fptl1C7KddVSHeCDFmsjaBeNNCFhRxdeYTUj9dAju3R+NQOQQ5biyBzLSunoh
V/XGka66FV3SLy8HY6aTFYjUFCoCHFOB/gP9l8w9fAcD0DbCVnuSLe6RTIIVgWiV
CoJ3t6Xt43Q5oxXbn5bbsm9OqX8vC/cEw5JgAJEzr5JeSLVzm1x/22ukR7QXIDD6
gCSAs3HUH8be5zpddUV7DsZ0WTRllKFbaj/224uSKHUCAwEAAaAAMA0GCSqGSIb3
DQEBCwUAA4IBAQA6P7LMhEqXaSwUclwNHC+x/BjgBlvk92WBkM1p3/j8psvK0qXc
C7hArAh83xCeIBiYbUhqJcY++GV+83N5dnHSVllST6yo/LASGu2cmZwvD7TTzfp8
9R7LmUbpb+7wEdwzqxN3wEEjZrmmVUfZf7fwLm8JaWHWx9I1B2DtN5/HJkU7ne4y
GijcaNdeu3ccCsq/WAl8qUFD4mIMTU0oKl3p2PZO/YCl2BKsx7Tk1YzfYkjKRinu
FKLUTgRKbU4C7CF1FMxUWnbebuO9LBgb7Ra8AVutBkoI909DnGY03pcvdfAGNhLj
oAPOL6HEKHlVTPq0EpSDQXqTr/X9qTaJJvYP
-----END CERTIFICATE REQUEST-----

Wyliczam SHA256 dla CSRa zakodowanego w DER.

1
2
3
openssl req -in ksm-kmk.csr -outform DER -out ksm-kmk.csr.der
sha256sum ksm-kmk.csr.der
51f2341e6d3f0b42db05fb5adba8e3f19d33279fe994602ae7323f4a918998c7 ksm-kmk.csr.der

Skrót będzie mi potrzebny do pobrania certyfikatu.

Plik XML

Tworzę plik rejestracja_certyfikatu.xml z CSRem.

1
2
3
4
<?xml version="1.0" encoding="UTF-8"?>
<rejestracjaCertyfikatu xmlns="http://www.giif.mofnet.gov.pl/xsd/rest/certyfikaty20171017">
<csr>MIICVzCCAT8CAQAwEjEQMA4GA1UEAwwHa3NtLWttazCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK48BF8GjdKp/9c9ujVl5xBPcsm/c9sfp9U/MqL2hekFwG6v9UXw8S8GRCG1rFbIKlKgPxQQWBcxzpJ9eWJ512J+kLTBLWYI2DAvLZiCnVFnNH8Fptl1C7KddVSHeCDFmsjaBeNNCFhRxdeYTUj9dAju3R+NQOQQ5biyBzLSunohV/XGka66FV3SLy8HY6aTFYjUFCoCHFOB/gP9l8w9fAcD0DbCVnuSLe6RTIIVgWiVCoJ3t6Xt43Q5oxXbn5bbsm9OqX8vC/cEw5JgAJEzr5JeSLVzm1x/22ukR7QXIDD6gCSAs3HUH8be5zpddUV7DsZ0WTRllKFbaj/224uSKHUCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQA6P7LMhEqXaSwUclwNHC+x/BjgBlvk92WBkM1p3/j8psvK0qXcC7hArAh83xCeIBiYbUhqJcY++GV+83N5dnHSVllST6yo/LASGu2cmZwvD7TTzfp89R7LmUbpb+7wEdwzqxN3wEEjZrmmVUfZf7fwLm8JaWHWx9I1B2DtN5/HJkU7ne4yGijcaNdeu3ccCsq/WAl8qUFD4mIMTU0oKl3p2PZO/YCl2BKsx7Tk1YzfYkjKRinuFKLUTgRKbU4C7CF1FMxUWnbebuO9LBgb7Ra8AVutBkoI909DnGY03pcvdfAGNhLjoAPOL6HEKHlVTPq0EpSDQXqTr/X9qTaJJvYP</csr>
</rejestracjaCertyfikatu>

Następnie podpisuję ten plik i uzyskuję rejestracja_certyfikatu.xml.sig.

Wysłanie CSRa

1
2
3
curl --data-binary @rejestracja_certyfikatu.xml.sig
--header 'Content-Type: application/xml'
https://test.giif.mofnet.gov.pl/api/rest2018/instytucje/0123456789/certyfikaty/

Należy zwrócić uwagę na NIP 0123456789 w żądaniu, to ten sam NIP, którego użyłem w XMLu rejestracji.

Pobranie certyfikatu komunikacyjnego

Pobieram certyfikat komunikacyjny, długi ciąg hexadecymalny na końcu żądania, to skrót SHA256 z CSRa zakodowanego w DER.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
curl --header 'Accept: application/x-pem-file' \
https://test.giif.mofnet.gov.pl/api/rest2018/certyfikatyKomunikacyjne/51f2341e6d3f0b42db05fb5adba8e3f19d33279fe994602ae7323f4a918998c7 \
| tee ksm-kmk.pem
-----BEGIN CERTIFICATE-----
MIIEkzCCA3ugAwIBAgIVAIL9PdgT+FUQoAN4QYXHIjOyJDz6MA0GCSqGSIb3DQEB
CwUAMIGMMQswCQYDVQQGEwJQTDEfMB0GA1UECgwWTWluaXN0ZXJzdHdvIEZpbmFu
c8OzdzEyMDAGA1UECxMpR2VuZXJhbG55IEluc3Bla3RvciBJbmZvcm1hY2ppIEZp
bmFuc293ZWoxKDAmBgNVBAMTH0dJSUYgVEVTVCBDQSBLb211bmlrYWN5am5lIDIw
MTkwHhcNMTkwNDA1MTAwMTAyWhcNMjAwODI3MDk1MjA4WjA8MRAwDgYDVQQDDAdr
c20ta21rMRIwEAYDVQQqDAlLcnp5c3p0b2YxFDASBgNVBAQMC8WabWlncm9kemtp
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArjwEXwaN0qn/1z26NWXn
EE9yyb9z2x+n1T8yovaF6QXAbq/1RfDxLwZEIbWsVsgqUqA/FBBYFzHOkn15YnnX
Yn6QtMEtZgjYMC8tmIKdUWc0fwWm2XULsp11VId4IMWayNoF400IWFHF15hNSP10
CO7dH41A5BDluLIHMtK6eiFX9caRrroVXdIvLwdjppMViNQUKgIcU4H+A/2XzD18
BwPQNsJWe5It7pFMghWBaJUKgne3pe3jdDmjFdufltuyb06pfy8L9wTDkmAAkTOv
kl5ItXObXH/ba6RHtBcgMPqAJICzcdQfxt7nOl11RXsOxnRZNGWUoVtqP/bbi5Io
dQIDAQABo4IBOTCCATUwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcD
AjCB4wYDVR0jBIHbMIHYgBT6g+iddLp+XmlZvyHFSXntzeUN06GBraSBqjCBpzEL
MAkGA1UEBhMCUEwxFDASBgNVBAgTC21hem93aWVja2llMREwDwYDVQQHEwhXYXJz
emF3YTEfMB0GA1UECgwWTWluaXN0ZXJzdHdvIEZpbmFuc8OzdzEyMDAGA1UECxMp
R2VuZXJhbG55IEluc3Bla3RvciBJbmZvcm1hY2ppIEZpbmFuc293ZWoxGjAYBgNV
BAMTEUdJSUYgVEVTVCBDQSAyMDE5ghBJV6ZSFxWMyESOVADlcKVLMB0GA1UdDgQW
BBQeRchIEyilOnTETgLUCkP5wb3rFjALBgNVHQ8EBAMCBLAwDQYJKoZIhvcNAQEL
BQADggEBAKv/jitjMZKMhp7nYl2hwjArbWkgRaR3ly+5fA6Mc/1jf3Tj3nLfaX1V
W+UGI6m6l5VluulJmEezuptnnffQVpWKu98BDq/DJRA2YcWeW+JIzZSYKZHP9EdB
YNibFozq74DydLs9/L184/Zt+fPAyFQMz8T02Y50PcyQuafLq81rcUJ4RlmxwYnu
lGKw93ObQZsdCklb1WfqUmtM7IfJKEOS8w7DGlHPQkR0sTxSR1gKFHyzE7U/VIZK
lfjrc/e1uMLYV1gV0nkWE7VSsMTc5S8k+JGSZfSKVXMMZVwVkZQGuFnwnQvGcEzj
ZQ5VXPITb8VZRe8Ak67812H/nCFQw5g=
-----END CERTIFICATE-----

Certyfikat zapisałem do pliku ksm-kmk.pem.

Poprawki 4 kwietnia

Poprawka do karty transakcji notarialnej na stronie

Zgłoszono brak możliwości wczytania karty transakcji notarialnej z pliku XML na stronie.

Poprawiłem kod deserializacji XMLa, w zakresie wczytywania podmiotów z karty transakcji, to powinno umożliwić ponowne wczytanie wygenerowanego pliku XML.

Uwaga

Wczytywanie plików XML na stronie, pozwala wyłącznie na wczytanie pliku z jedną transakcją.

Projekt strony zakładał przesyłanie każdej transakcji wypełnionej na stronie w oddzielnym pliku.

Poprawka do walidatora transakcji

Błąd w walidatorze transakcji powodował, że dla niepoprawnego pliku mógł pojawić się wyjątek NullPointerException.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
ksm@ksm-7530:~/tmp$ java -jar ~/src/comp/xml2018/xml2018-cli/target/xml2018-cli-1.0.1.jar validate TrGiif.xml
Apr 04, 2019 6:41:21 AM org.jboss.weld.bootstrap.WeldStartup <clinit>
INFO: WELD-000900: 2.4.8 (Final)
Apr 04, 2019 6:41:21 AM org.jboss.weld.environment.deployment.discovery.ReflectionDiscoveryStrategy processAnnotatedDiscovery
INFO: WELD-ENV-000014: Falling back to Java Reflection for bean-discovery-mode="annotated" discovery. Add org.jboss:jandex to the classpath to speed-up startup.
Apr 04, 2019 6:41:21 AM org.jboss.weld.bootstrap.WeldStartup startContainer
INFO: WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
Apr 04, 2019 6:41:21 AM org.jboss.weld.environment.se.WeldContainer fireContainerInitializedEvent
INFO: WELD-ENV-002003: Weld SE container STATIC_INSTANCE initialized
Exception in thread "main" picocli.CommandLine$ExecutionException: Error while calling command (pl.gov.mofnet.giif.xml2018.cli.RuleValidateCommand@30865a90): java.lang.NullPointerException
at picocli.CommandLine.execute(CommandLine.java:1180)
at picocli.CommandLine.access$800(CommandLine.java:141)
at picocli.CommandLine$RunLast.handle(CommandLine.java:1367)
at picocli.CommandLine$RunLast.handle(CommandLine.java:1335)
at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:1243)
at picocli.CommandLine.parseWithHandlers(CommandLine.java:1526)
at pl.gov.mofnet.giif.xml2018.cli.Main.init(Main.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:88)
at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:78)
at org.jboss.weld.injection.MethodInvocationStrategy$SimpleMethodInvocationStrategy.invoke(MethodInvocationStrategy.java:129)
at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:299)
at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:277)
at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:255)
at org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:269)
at org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:258)
at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:154)
at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:136)
at org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:716)
at org.jboss.weld.environment.se.WeldContainer.fireContainerInitializedEvent(WeldContainer.java:233)
at org.jboss.weld.environment.se.WeldContainer.endInitialization(WeldContainer.java:185)
at org.jboss.weld.environment.se.Weld.initialize(Weld.java:789)
at org.jboss.weld.environment.se.StartMain.go(StartMain.java:46)
at org.jboss.weld.environment.se.StartMain.main(StartMain.java:55)
Caused by: java.lang.NullPointerException
at pl.gov.mofnet.giif.xml.tagstack.TagStack$TagEntry.<init>(TagStack.java:18)
at pl.gov.mofnet.giif.xml.tagstack.TagStack.lambda$new$0(TagStack.java:52)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at pl.gov.mofnet.giif.xml.tagstack.TagStack.<init>(TagStack.java:52)
at pl.gov.mofnet.giif.xml2018.validators.common.Violation.<init>(Violation.java:28)
at pl.gov.mofnet.giif.xml2018.validators.common.Violation.<init>(Violation.java:34)
at pl.gov.mofnet.giif.xml2018.validators.notariat.KartaNotariat2018Validator.sprawdzDanePodmiotu(KartaNotariat2018Validator.java:129)
at pl.gov.mofnet.giif.xml2018.validators.notariat.KartaNotariat2018Validator.sprawdzPodmioty(KartaNotariat2018Validator.java:113)
at pl.gov.mofnet.giif.xml2018.validators.notariat.KartaNotariat2018Validator.validateTransaction(KartaNotariat2018Validator.java:56)
at pl.gov.mofnet.giif.xml2018.validators.notariat.KartaNotariat2018Validator.validateTransaction(KartaNotariat2018Validator.java:22)
at pl.gov.mofnet.giif.xml2018.validators.common.StreamProcesor.readAndValidateKartaTr(StreamProcesor.java:91)
at pl.gov.mofnet.giif.xml2018.validators.common.StreamProcesor.validateFileStructure(StreamProcesor.java:56)
at pl.gov.mofnet.giif.xml2018.validators.common.Karta2018Validator.validateFile(Karta2018Validator.java:117)
at pl.gov.mofnet.giif.xml2018.cli.RuleValidateCommand.validateFile(RuleValidateCommand.java:40)
at pl.gov.mofnet.giif.xml2018.cli.AbstractValidateCommand.call(AbstractValidateCommand.java:41)
at pl.gov.mofnet.giif.xml2018.cli.AbstractValidateCommand.call(AbstractValidateCommand.java:19)
at picocli.CommandLine.execute(CommandLine.java:1173)
... 26 more

Na stronie umieszczono walidator w wersji 1.0.2, zawierającej poprawkę.

Oprogramowanie do szyfrowania plików

Udostępniliśmy do pobrania program do podpisywania i szyfrowania plików.

Jest to aplikacja GUI, z komponentem uruchamianym z linii poleceń. Do jej uruchomienia wymagana jest Java w wersji 1.8 lub wyższej.

Wykorzystanie w systemie testowym

Aplikacja ma zaszyty w binarce certyfikat do szyfrowania dla systemu produkcyjnego.

Aby aplikacja szyfrowała z wykorzystaniem certyfikatu z systemu testowego należy:

  1. Pobrać certyfikat do szyfrowania dla systemu testowego.
  2. Skopiować ten certyfikat do katalogu w którym znajduje się binarka aplikacji.
  3. Zmienić nazwę certyfikat z GIIF-TEST-2019.crt na GIIF.crt.

Korzystanie z linii poleceń

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ksm@ksm-7530:~/tmp/SecureFile2$ java -jar SecureFile2.exe --help
Usage: <main class> [options] [command] [command options]
Options:
--help
Show usage.
Default: false
Commands:
signEncrypt Sign and encrypt files.
Usage: signEncrypt [options] Files to sign and encrypt.
Options:
--force, -f
Overwrite encrypted file.
Default: false
--outputFolder, -o
Folder to move encrypted file to.
--recipient, -c
Encryption certificate in PEM or DER format.
--suffix
Suffix to add to encrypted file.
Default: .enc

Przykład użycia

Zaszyfruj plik i zapisz do (wcześniej utworzonego) katalogu encrypted.

1
2
3
4
java -jar SecureFile2.exe signEncrypt \
--outputFolder encrypted/ \
--recipient GIIF.crt \
~/Downloads/wymiana_export_0000000000_Transakcja_testowa.xml

Wykonanie tego polecenia otworzy graficzne okno do podpisu. Po zakończeniu podpisywania zaszyfrowany plik zostanie umieszczony w katalogu encrypted.

Użycie programu w systemie Linux

1
2
3
4
5
6
7
8
9
10
mkdir -p ~/tmp/SecureFile2/encrypted
cd ~/tmp/SecureFile2
curl -o SecureFile2.exe https://test.giif.mofnet.gov.pl/oprogramowanie/SecureFile2.exe
curl -o GIIF.crt https://test.giif.mofnet.gov.pl/pki/GIIF-TEST-2019.crt
curl -o szafir-sdk-settings.xml https://test.giif.mofnet.gov.pl/szafir/settings/settings-linux.xml
java -jar SecureFile.exe
java -jar SecureFile2.exe signEncrypt \
--outputFolder encrypted/ \
--recipient GIIF.crt \
_nazwa_pliku_do_zaszyfrowania_

Linie 3-5 pobierają program i certyfikat do systemu testowego.

Kluczowa jest linia 5, która pobiera plik ustawień biblioteki Szafir SDK w wersji dla systemu Linux. W końcowej części pliku szafir-sdk-settings.xml znajduje się sekcja CryptoProviders, a w niej wskazane są położenia bibliotek PKCS#11 do obsługi kart kryptograficznych. Domyślnie skonfigurowana jest obsługa kart wystawianych przez Certum, których używają programiści z MF. W tej sekcji można dodać kolejne tagi HardwareProvider a w nich w tagu URI wskazać bibliotekę PKCS#11. Jeżeli biblioteka nie leży w ścieżce przeszukiwania bibliotek (ldconfig -v 2>/dev/null | grep -v ^$'\t'), to należy podać pełną scieżkę do niej jako URI, np: file:///opt/proCertumSmartSign/libSimplySignPKCS11.so.

Linia 6 pokazuje jak wywołać GUI. Linia 7-10 jak użyć trybu linii poleceń.

Program do walidacji plików

Udostępniliśmy do pobrania off-line’owy walidator plików.

Jest to aplikacja uruchamiana z linii poleceń, do jej uruchomienia wymagana jest Java w wersji 1.8 lub wyższej.

Pod Windows można ją uruchomić jako:

1
giif-xml2018-cli.exe --help

Pod Linuksem i OS-X jako:

1
java -jar giif-xml2018-cli.exe --help

W rezultacie otrzymujemy wynik podobny do tego:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Apr 02, 2019 10:21:44 AM org.jboss.weld.bootstrap.WeldStartup <clinit>
INFO: WELD-000900: 2.4.8 (Final)
Apr 02, 2019 10:21:44 AM org.jboss.weld.environment.deployment.discovery.ReflectionDiscoveryStrategy processAnnotatedDiscovery
INFO: WELD-ENV-000014: Falling back to Java Reflection for bean-discovery-mode="annotated" discovery. Add org.jboss:jandex to the classpath to speed-up startup.
Apr 02, 2019 10:21:44 AM org.jboss.weld.bootstrap.WeldStartup startContainer
INFO: WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
Apr 02, 2019 10:21:45 AM org.jboss.weld.environment.se.WeldContainer fireContainerInitializedEvent
INFO: WELD-ENV-002003: Weld SE container STATIC_INSTANCE initialized
Usage: <main class> [-hV] [COMMAND]
Prosta apka do walidacji plików.
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Commands:
validate Walidacja zgodności z regułami.
xsd-validate Waliduj zgodność z XSD.
Weld SE container STATIC_INSTANCE shut down by shutdown hook

Linie od 1 do 8 to log uruchamiania programu, jest on wypisywany na STDERR więc można go przekierować do /dev/null. Logi są wypisywane przez java.utils.logging, więc można je skonfigurować jak w każdym innym programie javowym przez, przez dodanie -Djava.util.logging.config.file=logging.properties przed -jar

Linie 9 do 15 to pomoc do programu.

Sprawdzenie zgodności ze schemą

1
java -jar giif-xml2018-cli.exe xsd-validate --help 2> /dev/null
1
2
3
4
5
6
7
8
9
10
11
12
Usage: <main class> xsd-validate [-hqV] [-f=<outputFormat>] [-o=<outputFile>]
plik...
Waliduj zgodność z XSD.
plik... Pliki do walidacji.
-f, --format=<outputFormat>
Format wyniku walidacji: TEXT, JSON, CSV, domyślnie TEXT.
-h, --help Show this help message and exit.
-o, --output=<outputFile>
Plik wynikowy, domyślnie STDOUT.
-q, --quiet Nie wypisuj komunikatu błędu na STDOUT.
-V, --version Print version information and exit.
Weld SE container STATIC_INSTANCE shut down by shutdown hook

Jeżeli żaden plik nie zawierał błędu aplikacja zwróci status 0.

Jeżeli co najmniej jeden z przetwarzanych plików zawierał błędy aplikacja zwróci 1.

Przykład

1
2
3
$ java -jar xml2018-cli-1.0.1.jar xsd-validate ~/Downloads/wymiana_export_0000000000_Transakcja_testowa\(1\).xml 2> /dev/null
Plik poprawny: /home/ksm/Downloads/wymiana_export_0000000000_Transakcja_testowa(1).xml
Weld SE container STATIC_INSTANCE shut down by shutdown hook

Przykład z błędem

1
2
3
$ java -jar giif-xml2018-cli.exe xsd-validate -f CSV -o wymiana.csv ~/Downloads/wymiana_export_0000000000_Transakcja_testowa\(1\).xml 2> /dev/null
Plik niepoprawny: /home/ksm/Downloads/wymiana_export_0000000000_Transakcja_testowa(1).xml
Weld SE container STATIC_INSTANCE shut down by shutdown hook

Powyższe polecenie sprawdza plik i zapisuje napotkane błędy do pliku wymiana.csv w formacie CSV. Utworzony plik wymiana CSV

1
2
Plik,Typ,Położenie karty,Karta po tagu,Identyfikator karty,Poprzedni identyfikator,Położenie błędu,Błąd po tagu,Komunikat,Dotyczy tagów,Wartość,Wyjątek
wymiana_export_0000000000_Transakcja_testowa(1).xml,BŁĄD,,/Dokument,Rekord Transakcja testowa,Przed pierwszym rekordem.,,,,,,"cvc-complex-type.2.4.a: Invalid content was found starting with element 't:DokumentTozsamosci'. One of '{""http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2018/10/10/giif/typy/"":PESEL, ""http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2018/10/10/giif/typy/"":DataUrodzenia}' is expected."

Sprawdzenie zgodności z regułami

1
java -jar giif-xml2018-cli.exe validate --help 2> /dev/null
1
2
3
4
5
6
7
8
9
10
11
12
Usage: <main class> validate [-hqV] [-f=<outputFormat>] [-o=<outputFile>]
plik...
Walidacja zgodności z regułami.
plik... Pliki do walidacji.
-f, --format=<outputFormat>
Format wyniku walidacji: TEXT, JSON, CSV, domyślnie TEXT.
-h, --help Show this help message and exit.
-o, --output=<outputFile>
Plik wynikowy, domyślnie STDOUT.
-q, --quiet Nie wypisuj komunikatu błędu na STDOUT.
-V, --version Print version information and exit.
Weld SE container STATIC_INSTANCE shut down by shutdown hook

Jeżeli żaden plik nie zawierał błędu aplikacja zwróci status 0.

Jeżeli co najmniej jeden z przetwarzanych plików zawierał błędy aplikacja zwróci 1.

Przykład

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ java -jar giif-xml2018-cli.exe validate ~/Downloads/wymiana_export_0000000000_Transakcja_testowa.xml 2>/dev/null
wymiana_export_0000000000_Transakcja_testowa.xml: {
położenieKarty: Dokument/TrescDokumentu/Karta
aktualnaKarta: Rekord Transakcja testowa
położenieBłędu: TrZlecanaPrzezKlienta/ZleceniodawcaOsobaFizyczna/OsFizycznaKlientIO/PESEL
komunikat: Niepoprawna suma kontrolna numeru PESEL.
wartość: 00000000001
}
{
położenieKarty: Dokument/TrescDokumentu/Karta
aktualnaKarta: Rekord Transakcja testowa
położenieBłędu: TrZlecanaPrzezKlienta/ZleceniodawcaOsobaFizyczna/OsFizycznaKlientIO/DokumentTozsamosci/SeriaINumerDokumentu
komunikat: Niepoprawna suma kontrolna numeru dowodu osobistego.
wartość: AAA000001
}
Plik niepoprawny: /home/ksm/Downloads/wymiana_export_0000000000_Transakcja_testowa.xml
Weld SE container STATIC_INSTANCE shut down by shutdown hook

Start systemu testowego

System testowy

System jest przeznaczony dla Instucji Obowiązanych oraz firm przygotowujących oprogramowanie dla Instytucji Obowiązanych do testowania przesyłania danych do systemu SI*GIIF.

Status systemu testowego

  1. System testowy NIE jest przystosowany do przetwarzania danych osobowych. Dane przesyłane do systemu powinny być fikcyjne lub zanonimizowane.
  2. Przesłanie danych do systemu testowego NIE stanowi realizacji obowiązku raportowania, nakładanego przez ustawę o przeciwdziałniu praniu pieniędzy oraz finansowaniu terroryzmu z dnia 1 marca 2018r.

Zakres systemu testowego

Aktualnie system testowy udostępnia API do przesyłania danych do systemu SI*GIIF.

Implementacja API w systemie testowym może różnić się w dwóch aspektach od systemu produkcyjnego:

  1. Czynności sprawdzające, związanej z rejestracją instytucji i rejestracją użytkowników, które w systemie produkcyjnym są wkonywane przez pracowników Ministerstwa Finansów, są pomijane (rejestracja, która jest formalnie poprawna, zostaje automatycznie zatwierdzona).
  2. Poprawki i nowe funkcjonalności trafiają do systemu testowego przed wdrożeniem ich w systemie produkcyjnym (system testowy pokazuje jak będzie działał system produkcyjny za kilka tygodni).

UPO

System testowy dla poprawnych plików danych wystawia dokumenty o strukturze takiej jak UPO z systemu SI*GIIF, jednakże pliki te są podpisane certyfikatem testowym wystawionym przez testowe CA.

Korzystanie z systemu

Aby móc korzystać z systemu należy:

  1. Posiadać podpis elektroniczny.
  2. Dokonać rejestracji Instytucji Obowiązanej (lub developera), można to zrobić przez wypełnienie formularza identyfikującego na stronie systemu testowego, lub przez API systemu.
  3. Rejestracja umożliwia skorzystanie z API do wygenerowania certyfikatu komunikacyjnego.
  4. Przekazywane pliki muszą być zaszyfrowane certyfikatem testowym, dostępnym na stronie systemu testowego.
  5. Możliwe jest pobranie walidatora, który służy do sprawdzenia poprawności plików z transakcjami. Opis użycia programu znajduje się w blogu.