MyÚčto MyÚčto.cz Manuál
Stáhnout PDF Zpět na hlavní stránku

72. Elektronické podpisy

Elektronické podpisy slouží ke správě certifikátů, podpisových profilů a pravidel, který profil se použije pro konkrétní výstup. Aktuálně se podepisují PDF výstupy a vybrané odchozí e-maily.

Kde funkci najdeš, závisí na roli:

PDF výstupy:

Když je výkaz práce vložený jako další stránka PDF faktury, podpis výstupu Vydaná faktura pokrývá celé výsledné PDF včetně této stránky. Výstup Výkaz práce se používá pro samostatně generované PDF výkazu. Sloučený export se podepisuje až jako hotový celek a používá stejnou konfiguraci profilu jako výstup Vydaná faktura. Podpis se provede jen po zaškrtnutí volby v exportu; bez ní zůstane sloučené PDF nepodepsané.

S/MIME e-mailové výstupy:

PDF používá PAdES podpis. Bez časového razítka jde o úroveň PAdES-B, s nastaveným TSA serverem o PAdES-T. Odchozí e-mail se podepisuje jako S/MIME zpráva. S/MIME podpis potvrzuje odesílatele a integritu zprávy, ale e-mail nešifruje.

📁 Podpis zachovává archivní formát. Faktury se generují jako PDF/A-3b a elektronický podpis tuto archivní konformitu zachová — podepsaný dokument je stále validní PDF/A-3b (ověřeno nástrojem veraPDF).

72.1 Základní pojmy

PojemVýznam
Podpisový profilPojmenované nastavení podpisu. Obsahuje vlastnictví, použití, backend, volitelnou PDF/TSA konfiguraci a jeden společný certifikát profilu.
Profil dodavateleProfil vlastněný dodavatelem. Spravuje ho admin a může se použít jako centrální firemní podpis.
Můj profilProfil vlastněný konkrétním uživatelem. Použije se jen tam, kde konfigurace výstupu počítá s přihlášeným uživatelem.
Konfigurace podpisůAdmin nastavení, které určuje, zda se PDF nebo e-mailový výstup podepisuje a odkud se bere podpisový profil.
Mapování podpisových profilůUživatelské výchozí profily pro výstupy, kde admin zvolil strategii Přihlášený uživatel.

72.2 Oprávnění

RoleCo může
adminSpravuje profily dodavatele, může spravovat i profily uživatelů, nastavuje konfiguraci podpisů a povoluje uživatelské profily. Vše najde na Systém -> E-maily -> Elektronické podpisy.
accountantPo povolení adminem může spravovat pouze vlastní podpisové profily a vlastní výchozí mapování, a to na samostatné stránce Systém -> Elektronické podpisy. V detailu dokladu může změnit výběr profilu, ale konkrétní profil dodavatele může vybrat jen admin.
readonlyMůže číst a stahovat doklady podle běžných oprávnění, ale nemůže měnit podpisové profily, mapování ani per-dokladový výběr podpisu. Přímý přístup na URL elektronických podpisů ho přesměruje pryč.

Admin povolí uživatelské profily přepínačem Povolit uživatelům správu vlastních podpisových profilů (na záložce Elektronické podpisy v E-mailech). Pokud není zapnutý, účetní položku elektronických podpisů v menu nevidí.

72.3 Založení podpisového profilu

  1. Admin otevře Systém -> E-maily a přepne na záložku Elektronické podpisy. Účetní (má-li povoleno) otevře rovnou Systém -> Elektronické podpisy.
  2. V sekci Podpisové profily klikni Nový profil.
  3. Vyplň Název a Kód. Kód je technický identifikátor profilu a musí být unikátní v rámci dodavatele.
  4. Vyber Vlastník profilu:
  1. V části Použití vyber, k čemu se profil smí použít:
  1. Backend profilu ponech native. E-mailové výstupy používají S/MIME backend interně podle typu výstupu.
  2. Nech profil aktivní, pokud se má dát použít při podepisování.
  3. Ulož profil.

72.4 Certifikát P12/PFX

Každý profil používá jeden certifikát. Stejný certifikát se může použít pro PDF podpis i pro S/MIME podpis e-mailu, pokud profil povoluje obě použití.

U vlastního profilu jsou dostupné dva zdroje:

ZdrojKdy použít
Použít osobní certifikát EPOCertifikát už máš uložený v osobním šifrovaném trezoru v Nástroje → EPO podání a archív. PFX ani heslo se neukládají podruhé.
Nahrát samostatný certifikátProfil dodavatele, profil jiného uživatele nebo certifikát, který nechceš používat pro EPO.

Použití osobního certifikátu EPO

  1. V Nástroje → EPO podání a archív otevři Certifikáty EPO, nahraj P12/PFX a povol ho pro aktuální firmu.
  2. Založ nebo uprav profil s vlastníkem Můj profil.
  3. V části Certifikát profilu zvol Použít osobní certifikát EPO a vyber certifikát z trezoru.
  4. Potvrď se — buď Ověřit přístupovým klíčem, nebo aktuálním heslem do MyÚčta a při zapnutém 2FA také TOTP. Tím vědomě povolíš použití soukromého klíče v podpisovém profilu.
  5. Ulož profil.

Profil ukládá jen vazbu a veřejná metadata certifikátu. PFX a jeho heslo zůstávají v původním šifrovaném trezoru, při PDF nebo S/MIME podpisu se dešifrují pouze v paměti serveru. Certifikát nelze z trezoru smazat ani odebrat z firmy, dokud ho používá její aktivní podpisový profil. Nejprve v profilu certifikát odeber nebo ho nahraď jiným.

Samostatný certifikát profilu

  1. Otevři editaci profilu.
  2. V části Certifikát profilu klikni Vybrat soubor.
  3. Vyber soubor ve formátu P12/PFX s privátním klíčem.
  4. Zadej Heslo k certifikátu. Aplikace ho použije pro kontrolu souboru a podle zvolené politiky ho buď uloží šifrovaně, nebo jen ověří.
  5. Vyber politiku hesla.
  6. Klikni Uložit profil nebo Nahrát certifikát podle toho, jestli profil teprve vytváříš, nebo upravuješ.

Po nahrání se zobrazí metadata certifikátu: subject, e-mail v certifikátu, platnost, politika hesla a SHA-256 fingerprint. Soubor certifikátu se ukládá do interního storage aplikace. V produkci je vhodné mít MYINVOICE_DATA_DIR nastavený mimo webový root (MyÚčto je fork MyInvoice a tento název proměnné prostředí sdílí beze změny).

Certifikát bez privátního klíče nestačí. Pokud import selže s chybou špatného hesla nebo neplatného PKCS#12, zkontroluj, že P12/PFX opravdu obsahuje privátní klíč a že zadáváš správnou passphrase.

Pro S/MIME podpis je prakticky důležité, aby certifikát, včetně sdíleného osobního certifikátu EPO, obsahoval e-mailovou adresu používanou jako odesílatel nebo aby ho příjemcův klient uměl přiřadit k odesílateli. Aplikace podpis vytvoří, ale důvěryhodnost a shoda identity se vyhodnocuje až v e-mailovém klientovi příjemce.

72.5 Politika hesla k certifikátu

PolitikaKdy použítChování
Uložit šifrovaně (encrypted_store)Běžný produkční režim a background joby.Heslo se uloží v DB šifrovaně pomocí aplikačního klíče. Běžný uživatel ho nevidí a API ho nikdy nevrací.
Passphrase file (passphrase_file)Když nechceš heslo ukládat do DB, ale aplikace musí podepisovat i bez interaktivního vstupu.V profilu se uloží jen ID hesla. Skutečné heslo se čte ze serverového souboru nastaveného v konfiguraci.
Ptát se při použití (prompt_on_use)Interaktivní podpis na vyžádání.V této iteraci není pro runtime podpisy podporováno. Pro PDF i S/MIME zvol šifrované uložení nebo passphrase file.

Passphrase file

Cestu k souboru nastav správce v konfiguraci:

'signing' => [
    'passphrase_file' => '/var/lib/myucto/signing-passphrases.json',
],

Kvůli zpětné kompatibilitě se bere i pdf_signing.passphrase_file.

Soubor může být JSON:

{
  "profiles": {
    "owner_john": { "passphrase": "heslo-k-p12" },
    "owner_novak": { "passphrase": "jine-heslo" }
  }
}

Nebo INI:

[owner_john]
passphrase=heslo-k-p12

[owner_novak]
passphrase=jine-heslo

Do pole ID hesla v passphrase file v profilu zadej například owner_john. Soubor musí být čitelný procesem aplikace a neměl by být součástí webového rootu ani gitu.

72.6 TSA a důvod podpisu

V profilu je volitelná část PDF nastavení profilu. Tato nastavení platí jen pro PDF podpisy:

PoleVýznam
Použít časové razítkoZapne PAdES-T. Po zapnutí je povinná TSA URL.
TSA URLRFC 3161 endpoint časové autority, například URL služby poskytovatele časových razítek.
TSA jméno / hesloHTTP Basic auth, pokud ho TSA server vyžaduje.
Důvod podpisuTextový důvod v PDF podpisu. Když zůstane prázdný, použije se výchozí text podle typu dokumentu: Faktura, Výkaz práce nebo Hromadný export faktur.

Bez TSA se dokument podepíše jako PAdES-B. Pokud je TSA nastavená a dostupná, přidá se důvěryhodné časové razítko a výsledkem je PAdES-T.

S/MIME podpis odchozího e-mailu v této implementaci TSA nepoužívá.

72.7 Konfigurace podpisů pro výstupy

Sekci Konfigurace podpisů vidí admin na záložce Elektronické podpisy v Systém -> E-maily. Každý řádek nastavuje jeden typ výstupu: buď PDF, nebo S/MIME e-mail.

SloupecVýznam
VýstupNapříklad Vydaná faktura, Výkaz práce nebo E-mail s fakturou. Badge PDF nebo S/MIME říká, jaký typ podpisu se použije.
PodepisovatZapne nebo vypne podpis pro daný výstup aktuálního dodavatele.
Výběr profiluUrčuje, odkud se vezme podpisový profil.
ProfilKonkrétní profil dodavatele, pokud výstup používá strategii Profil dodavatele.
Fallback uživateleCo se má stát, když je zvolen Přihlášený uživatel, ale uživatel nemá použitelný vlastní profil.
Při chyběCo se má stát, když podpis selže nebo není nakonfigurovaný.

Výběr profilu

HodnotaChování
Profil dodavatelePoužije se konkrétní aktivní profil dodavatele z pole Profil. Uživatelské profily se pro tento výstup nepoužijí.
Přihlášený uživatelAplikace použije výchozí profil přihlášeného uživatele pro daný výstup. Pokud ho nenajde, použije se Fallback uživatele.

U automatických/background operací nemusí existovat přihlášený uživatel. Pokud je výstup nastavený na Přihlášený uživatel, je proto důležité nastavit rozumný fallback.

Fallback uživatele

HodnotaChování
Profil dodavatelePokud uživatel nemá vlastní profil, použije se profil dodavatele z řádku konfigurace.
Vrátit nepodepsanéVýstup pokračuje bez podpisu a událost se zapíše do logu. U PDF se vydá nepodepsané PDF, u e-mailu odejde nepodepsaná zpráva.
Zastavit s chybouExport nebo odeslání selže s chybou.

Při chybě

HodnotaChování
Vrátit nepodepsané (fallback_unsigned)Při chybě podpisu výstup pokračuje bez podpisu a zapíše se auditní událost. Hodí se tam, kde je důležitější dostupnost dokladu nebo e-mailu než tvrdé vynucení podpisu.
Zastavit s chybou (fail_closed)Při chybě podpisu export nebo odeslání selže. Hodí se tam, kde podpis musí být povinný.
Přeskočit bez konfigurace (skip_when_unconfigured)Pokud chybí použitelný profil, podpis se přeskočí.

Tlačítko Otestovat v řádku konfigurace vytvoří dočasné PDF a zkusí ho podepsat podle stejného mapování. Zobrazuje se jen u PDF výstupů. Výsledek zobrazí stav, použitý profil a vlastníka certifikátu (CN), pokud ho backend zjistí.

Změny všech řádků se uloží společně tlačítkem Uložit konfiguraci podpisů pod tabulkou.

S/MIME podpis otestuješ odesláním testovacího e-mailu pro příslušný typ zprávy a ověřením podpisu v e-mailovém klientovi.

72.8 Mapování podpisových profilů uživatele

Sekce Mapování podpisových profilů slouží pro osobní výchozí profily přihlášeného uživatele. Admin ji vidí na záložce Elektronické podpisy v Systém -> E-maily, účetní (má-li povoleno) na stránce Systém -> Elektronické podpisy.

Použije se jen tehdy, když admin v Konfiguraci podpisů nastavil daný výstup na Přihlášený uživatel. Pokud je výstup nastavený na Profil dodavatele, uživatelský profil se ignoruje a UI na to upozorní.

Pro každý výstup vyber vlastní aktivní profil, který podporuje stejné použití jako výstup. Pro PDF výstupy musí profil podporovat použití PDF, pro e-mailové výstupy použití S/MIME e-mail.

72.9 Výběr podpisu na konkrétním dokladu

Na detailu faktury je pro uživatele s právem zápisu sekce Elektronický podpis dokumentu. Umožňuje přepsat výchozí konfiguraci pro konkrétní doklad.

HodnotaChování
DěditPoužije se globální konfigurace z Konfigurace podpisů.
Přihlášený uživatelPro tento doklad se použije výchozí podpisový profil uživatele, který PDF generuje nebo odesílá.
Profil dodavatelePro tento doklad se použije profil dodavatele. Admin může vybrat konkrétní profil, účetní nechává profil zdědit z konfigurace.

Změna výběru u faktury invaliduje PDF cache, aby se další stažení nebo odeslání vygenerovalo s aktuálním podpisem. U uživatelských profilů cache závisí na tom, který uživatel PDF generuje, takže stejný doklad může být podepsaný jiným profilem podle přihlášeného uživatele.

Per-dokladový výběr se týká PDF dokladů. Odchozí e-maily se řídí mapováním e-mailových výstupů v Konfiguraci podpisů.

72.10 Podepisování odchozích e-mailů

S/MIME podpis se aplikuje při sestavení e-mailu těsně před odesláním přes SMTP. Podepisuje se výsledná MIME zpráva včetně HTML/textového těla a příloh, takže příjemce může v běžném e-mailovém klientovi ověřit, že zpráva nebyla cestou změněna.

Podporované e-mailové výstupy:

Výstup v UIInterní šablona
E-mail s fakturouinvoice_send
E-mail s upomínkouinvoice_reminder
E-mail s připomínkou zálohyproforma_reminder
E-mail s poděkováním za úhraduinvoice_payment_thanks
E-mail se schválením výkazuinvoice_approval
E-mail s připomínkou pravidelné fakturyrecurring_draft_reminder

Nastavení funguje stejně jako u PDF výstupů:

Výchozí politika S/MIME identity je Podepsat a varovat. Pokud certifikát neobsahuje e-mailovou identitu nebo se liší od skutečného odesílatele ve From, e-mail se podepíše a neshoda se zapíše do activity logu. Striktní kontrolu lze zapnout volbou Vyžadovat shodu From.

Režimy S/MIME identity:

RežimChování
Vyžadovat shodu FromFrom se musí přesně shodovat s e-mailem v certifikátu.
Podepsat a varovatE-mail se podepíše i při neshodě a do activity logu se zapíše varování.
Přepsat From při stejné doméněPři neshodě se From přepíše na e-mail certifikátu jen tehdy, když původní From používá stejnou doménu.
Přepsat From podle allowlistuPři neshodě se From přepíše na e-mail certifikátu jen tehdy, když původní From odpovídá allowlistu e-mailů nebo domén.

Režimy s přepsáním From podepisují až výslednou zprávu po úpravě hlavičky. Activity log obsahuje původní From, nové From, e-mail certifikátu a použitý podpisový profil. Pokud podmínka pro přepsání neplatí, chová se režim jako striktní chyba a použije se nastavená politika chyby.

Pokud je v Odesílacím e-mailovém profilu vybraný konkrétní S/MIME profil, má pro daný e-mail přednost před obecným mapováním profilu ve výstupu. Díky tomu může jedna odesílací identita držet pohromadě From, DKIM identitu a certifikát.

S/MIME podpis e-mail nešifruje. Obsah zprávy zůstává čitelný stejně jako u běžného e-mailu, jen je opatřen elektronickým podpisem.

72.11 Ověření podepsaného PDF

Po stažení můžeš PDF ověřit v běžné PDF čtečce nebo na serveru například přes pdfsig:

pdfsig Faktura-2606009.pdf

U platného podpisu uvidíš stav podpisu jako validní. Pokud výstup hlásí, že vydavatel certifikátu je neznámý, znamená to obvykle chybějící důvěryhodný certifikační řetězec v prostředí ověřovatele. Samotný kryptografický podpis může být přesto validní.

72.12 Audit a řešení problémů

Správa i použití podpisů se zapisuje do activity logu. Typické události:

UdálostVýznam
signing.profile_created / signing.profile_updated / signing.profile_deletedZměna podpisového profilu.
signing.credential_uploaded / signing.credential_deleted / signing.credential_passphrase_updatedZměna certifikátu nebo politiky hesla.
signing.output_settings_updatedZměna konfigurace podpisů pro výstup.
signing.user_default_updatedZměna osobního mapování profilu.
signing.document_selection_updatedZměna výběru podpisu na konkrétním dokladu.
signing.pdf_signedPDF bylo úspěšně podepsáno.
signing.failedPodepisování selhalo. Podle politiky se buď vrátilo nepodepsané PDF, nebo operace skončila chybou.
signing.skippedPodepisování bylo přeskočeno, například kvůli vypnutému výstupu nebo chybějící konfiguraci.
signing.email_signedOdchozí e-mail byl úspěšně podepsán S/MIME.
signing.email_identity_warningS/MIME podpis proběhl v režimu varování, přestože e-mail v certifikátu neodpovídá hlavičce From.
signing.email_failedS/MIME podpis e-mailu selhal.
signing.email_skippedS/MIME podpis e-mailu byl přeskočen, například kvůli chybějící konfiguraci.

Časté problémy:

ProblémCo zkontrolovat
PDF se vygenerovalo bez podpisuZkontroluj Konfiguraci podpisů, aktivní profil, nahraný certifikát a politiku Při chybě. Při fallback_unsigned se nepodepsané PDF vydá záměrně.
Export skončil chybou PDF podpis není nakonfigurovanýVýstup je nastavený na tvrdé selhání a chybí použitelný profil nebo certifikát.
Certifikát nejde nahrátOvěř P12/PFX, heslo, privátní klíč a expiraci certifikátu.
Background job nepodepisuje uživatelským profilemBackground job nemá přihlášeného uživatele. Pro tyto scénáře použij fallback na profil dodavatele nebo passphrase file.
Po změně konfigurace se stále vrací staré PDFZkontroluj PDF historii a cache. Změna konfigurace podpisů faktury cache invaliduje, ale starší archivované verze zůstávají jako auditní záznam.
E-mail odešel bez S/MIME podpisuZkontroluj, že je zapnutý konkrétní e-mailový výstup, profil podporuje S/MIME e-mail a politika chyby není nastavená na tichý fallback.
E-mailový klient podpisu nevěříZkontroluj e-mail v certifikátu, důvěryhodnost certifikační autority a to, zda po podpisu zprávu neupravuje SMTP brána nebo antispam.
Účetní nevidí položku Elektronické podpisy v menuZkontroluj v Systém -> E-maily -> Elektronické podpisy, jestli je zapnutý přepínač Povolit uživatelům správu vlastních podpisových profilů.

72.13 Poznámka k REST API

Podpisové endpointy jsou interní administrační endpointy používané SPA aplikací (/api/settings/... a /api/documents/.../signature-selection). Nejsou součástí veřejného /api/v1 subsetu a nejsou popsané v api/openapi.yaml.

Veřejné endpointy pro stažení nebo odeslání PDF vrací dokument podle aktuální konfigurace podpisů, ale samotná správa podpisových profilů zatím není veřejné API pro externí integrace.