GitHub

Szyfrowanie

Zrozum, jak ksef2 używa publicznych certyfikatów KSeF do szyfrowania tokenów, sesji i eksportów.

Na tej stronie

KSeF wymaga, aby część materiału payloadów była zaszyfrowana zanim trafi do API. SDK ukrywa tę mechanikę w zwykłych przepływach, ale warto wiedzieć, który klucz jest chroniony i co trzeba zachować, aby kontynuować przepływ.

Publiczne certyfikaty używane do tego szyfrowania są publikowane przez KSeF. Aplikacja pobiera publiczny materiał certyfikatu, szyfruje lokalne sekrety dla KSeF i wysyła public_key_id, który wskazuje użyty klucz publiczny KSeF.

Gdzie pojawia się szyfrowanie

PrzepływLokalny sekretCo otrzymuje KSeF
Uwierzytelnianie tokenemToken KSeF razem ze znacznikiem czasu challenge.Zaszyfrowany payload uwierzytelniania tokenem i odpowiadający public_key_id.
Sesja onlineKlucz AES i IV wygenerowane dla XML faktury.Zaszyfrowany klucz sesji, IV i zaszyfrowane payloady faktur.
Sesja batchKlucz AES i IV dla paczki batch.Zaszyfrowany materiał klucza batch i deklaracje uploadu.
Eksport fakturKlucz AES i IV dla paczki eksportu.Zaszyfrowany materiał klucza eksportu; SDK później używa lokalnego materiału do odszyfrowania pobranych części.

Model publicznego certyfikatu

KSeF publikuje publiczne certyfikaty klucza z metadanymi, które mówią klientom, do czego służy klucz i kiedy jest ważny.

Pole SDKZnaczenie
certificateMateriał certyfikatu Base64 używany przez warstwę kryptograficzną SDK.
certificate_idIdentyfikator obiektu certyfikatu.
public_key_idIdentyfikator klucza publicznego; odsyłany do KSeF po szyfrowaniu.
valid_from / valid_toOkno ważności używane przy decyzjach cache i odświeżania.
usageksef_token_encryption albo symmetric_key_encryption.
certificates = client.encryption.get_certificates(
    usage=["symmetric_key_encryption"],
)

for certificate in certificates:
    print(certificate.public_key_id, certificate.valid_to, certificate.usage)
python

Rotacja i cache

Traktuj publiczne certyfikaty szyfrowania jak rotującą infrastrukturę. KSeF może opublikować nowy certyfikat dla tego samego klucza albo obrócić na nowy klucz. Nowy certyfikat może zmienić certificate_id; nowy klucz zmienia public_key_id.

Cache certyfikatów jest przydatny, jeśli poprawia czas startu, ale odświeżaj go zanim długotrwałe workery otworzą sesje, zaplanują eksporty albo rozpoczną uwierzytelnianie tokenem. Nie zapisuj treści certyfikatów na stałe w kodzie aplikacji.

Co zapisywać

Dla zwykłej wysyłki faktur zapisuj identyfikatory biznesowe, referencje KSeF, dane UPO i finalne artefakty. Nie zapisuj niskopoziomowych szczegółów szyfrowania, chyba że inny proces musi wznowić sesję.

Dla eksportów przechowuj ExportHandle, aż paczka zostanie pobrana. Zawiera lokalny materiał deszyfrujący potrzebny do części eksportu. Dla wznawianych sesji online albo batch zapisuj serializowany stan sesji zwrócony przez SDK zamiast ręcznie rekonstruować klucze.

Powiązane strony

  • Sprawdź certyfikaty szyfrowania: Pobierz i obejrzyj publiczne certyfikaty KSeF z klienta głównego.
  • Wyślij faktury: Używaj szyfrowanych sesji online i batch bez ręcznego zarządzania kluczami.
  • Pobierz faktury: Pobierz pojedyncze faktury i szyfrowane paczki eksportu.
  • Certyfikaty: Oddziel publiczne certyfikaty szyfrowania od certyfikatów uwierzytelniania i certyfikatów wydanych przez KSeF.