5 marca 2026

Jak podpisać dokument KSeF — XMLDSig i certyfikat kwalifikowany

Jak podpisać dokument XML w KSeF? Podpis XMLDSig, XAdES, certyfikat kwalifikowany — praktyczny przewodnik dla programistów integrujących z KSeF.

Jak podpisać dokument KSeF?

Podpis elektroniczny w KSeF jest wymagany przy autoryzacji certyfikatem i w niektórych operacjach zarządzania. Poniżej praktyczny przewodnik.

Kiedy potrzebny jest podpis w KSeF?

InitSigned — otwarcie sesji interaktywnej za pomocą certyfikatu kwalifikowanego wymaga podpisania challenge.

Zarządzanie uprawnieniami — niektóre operacje administracyjne wymagają podpisu.

Uwaga: Do zwykłej wysyłki faktur przez sesję tokenową (InitToken) podpis dokumentu faktury nie jest wymagany — wystarczy token.

Format podpisu

KSeF akceptuje:

  • XMLDSigXML Digital Signature (standard W3C)
  • XAdESXML Advanced Electronic Signatures (profil XMLDSig)
  • Workflow autoryzacji certyfikatem

  • 1.Pobierz challenge — GET /api/online/Session/AuthorisationChallenge
  • - Zwraca losowy ciąg danych do podpisania

  • 2.Podpisz challenge — użyj certyfikatu kwalifikowanego do podpisania danych
  • 3.Otwórz sesję — POST /api/online/Session/InitSigned
  • - Wyślij zaszyfrowane i podpisane dane

    Podpis w Java

    // Załaduj certyfikat z KeyStore
    KeyStore keyStore = KeyStore.getInstance("PKCS12");
    keyStore.load(new FileInputStream("certyfikat.p12"), haslo.toCharArray());
    
    // Pobierz klucz prywatny
    PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, haslo.toCharArray());
    X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias);
    
    // Inicjalizuj XMLSignature
    XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
    // ... konfiguracja i podpisanie

    Podpis w .NET

    // Załaduj certyfikat
    X509Certificate2 cert = new X509Certificate2("certyfikat.pfx", haslo);
    
    // Podpisz XML
    SignedXml signedXml = new SignedXml(xmlDocument);
    signedXml.SigningKey = cert.GetRSAPrivateKey();
    // ... konfiguracja i podpisanie

    Typowe błędy przy podpisywaniu

  • Podpisywanie złego fragmentu dokumentu XML
  • Błędny algorytm (powinien być RSA-SHA256 lub RSA-SHA512)
  • Niezgodność encoding (musi być UTF-8)
  • Wygasły certyfikat
  • Certyfikaty w chmurze (SimplySign)

    Certyfikaty chmurowe wymagają użycia API dostawcy do podpisywania. Nie możesz ich używać jak lokalnych plików .p12 — musisz wywołać API SignCloud lub podobne.

    Uproszczenie: korzystaj z tokenów

    Jeśli możesz, unikaj autoryzacji certyfikatem w automatycznych systemach. Wygeneruj token raz (za pomocą certyfikatu), a potem używaj tokena do otwierania sesji bez potrzeby podpisywania.

    Potrzebujesz pomocy?

    Nasze [proxy KSeF](/proxy-ksef) obsługuje podpisywanie po swojej stronie. [Skontaktuj się z nami](/kontakt) jeśli masz problemy z implementacją podpisu.

    jak podpisać dokument ksefksef xmldsigksef podpis xmlksef certyfikat podpisksef xades podpis

    Potrzebujesz pomocy z KSeF?

    Oferujemy integrację, proxy KSeF, aplikację Spektra i pomoc wdrożeniową.