keyring

Tokeny KSeF przechowywane są w keyringu. Domyślnie jest to keyring systemowy (tj. wbudowany w system operacyjny taki jak MacOS, Windows czy Linux), ale w wyjątkowej sytuacji (tj. w przypadku systemu który nie jest w stanie wspierać tego rozwiązania) można użyć keyringu opartego o zaszyfrowany plik. Opiszę tutaj jak to zrobić

Flagi dotyczące keyringu

FlagaOpis
--keyring.enginesilnik keyringu (domyślna wartość to system). Dopuszczalne wartości: system, file
--keyring.file.ask-passwordpytaj o hasło do keyringu na wejściu standardowym (stdin)
--keyring.file.bufferedbuforuj keyring w pamięci (plik zostanie zapisany raz przy zamykaniu programu)
--keyring.file.password-env-varnazwa zmiennej środowiskowej która zawiera hasło do keyringu
--keyring.file.password-fileścieżka do pliku z hasłem keyringu
--keyring.file.pathścieżka do keyringu opartego o plik

Jak nietrudno się domyślić najbardziej newralgicznymi flagami są te które odpowiadają za przekazanie hasła do programu. Poniżej zamieszczam kilka przykładów wywołań

Hasło musi mieć długość 16 lub 32 znaków i nie jest to moja fanaberia tylko wynika to ze specyfikacji zastosowanego szyfru AES

Przykład 1: Użycie hasła zapisanego w pliku

./ksef --keyring.engine file --keyring.file.path keyring-plikowy --keyring.file.password-file password.txt --keyring.file.buffered=true [ ... ]
  • Program użyje keyringu zapisanego w zaszyfrowanym pliku keyring-plikowy.
  • Jeśli plik nie istnieje - zostanie utworzony.
  • Hasło zostanie odczytane z pliku password.txt (białe znaki są ignorowane)
Plik z zapisanym hasłem musi mieć uprawnienia do odczytu i zapisu tylko i wyłącznie przez właściciela (0600). W przeciwnym wypadku program odmówi użycia takiego pliku i zakończy się z kodem błędu

Przykład 2: Przekazanie hasła przez użytkownika

Nie sądzę żeby to było praktyczne, ale ..

./ksef --keyring.engine file --keyring.file.path keyring-plikowy --keyring.file.ask-password --keyring.file.buffered=true [ ... ]
  • Program użyje keyringu zapisanego w zaszyfrowanym pliku keyring-plikowy.
  • Jeśli plik nie istnieje - zostanie utworzony.
  • Użytkownik zostanie zapytany o podanie hasła

Przykład 3: Przekazanie nazwy zmiennej środowiskowej zawierającej hasło

ZMIENNA_Z_HASLEM=aaaaaaaaaaaaaaaa ./ksef --keyring-engine file --keyring.file.path keyring-plikowy --keyring.file.password-env-var ZMIENNA_Z_HASLEM --keyring.file.buffered=true [ ... ]