BMF-RKSV-Technik / at-registrierkassen-mustercode

111 stars 39 forks source link

Fehlermeldung im Export -> Kryptographische Gültigkeit #631

Closed cotasgmbh closed 6 years ago

cotasgmbh commented 6 years ago

Hallo, was soll mir diese Meldung sagen? An welcher Stelle sollte ich jetzt suchen?

Startbeleg:

[ "_R1-AT3_COTAS_1_2017-10-02T11:00:00_0,00_0,00_0,00_0,00_0,00_qocfm25ePj4Y0U5QQtHXxw==_517ec8218772_EXgAimC9nz8=_ZXlKaGJHY2lPaUpGVXpJMU5pSjkuWDFJeExVRlVNMTlEVDFSQlUxOHhYekl3TVRjdE1UQXRNREpVTVRFNk1EQTZNREJmTUN3d01GOHdMREF3WHpBc01EQmZNQ3d3TUY4d0xEQXdYM0Z2WTJadE1qVmxVR28wV1RCVk5WRlJkRWhZZUhjOVBWODFNVGRsWXpneU1UZzNOekpmUlZoblFXbHRRemx1ZWpnOS5pZ0l0c3FqTkVJUXRXdGxQR3ZXcVp1a1l1WU5pdE9qOTc5anNBWXo5bVlqQ0M0Z0wtX1pJUDFmTFlLZlpHNlA2ZmFxRWRTdE5kZDREMHhDSXRiWlZ2dw==" ]

Fehler:

{ "verificationId" : "VERIFICATION_FROM_CASHBOX", "version" : 1, "verificationName" : "Prüfergebnis - Kasse", "verificationTextualDescription" : "Bei der Belegprüfung wird untersucht, ob die Vorgaben der RKSV in Bezug auf den maschinenlesbaren Code am Beleg und auf die meldepflichtigen Metadaten der Sicherheitseinrichtung befolgt werden. Im Fehlerfall sind die genauen Fehlerinformationen nachfolgend angeführt.", "verificationState" : "FAIL", "verificationResultDetailedMessage" : "Der vorliegende Beleg weist Fehler im maschinenlesbaren Code auf. Am besten, Sie übermitteln zur Problembehandlung die nachfolgende Fehlerbeschreibung an Ihren Kassenhersteller.", "verificationTimestamp" : "2017-10-02T11:11:43.548+02:00", "verificationResultList" : [ { "verificationId" : "RECEIPT_FULL", "version" : 1, "verificationName" : "Detailprüfung des maschinenlesbaren Codes", "verificationTextualDescription" : "Dieses Modul und die dazugehörigen Submodule überprüfen die Gültigkeit des Belegs. Dabei werden sowohl Formatprüfungen, kryptographische Prüfungen (verschlüsselter Umsatzzähler, Signatur) als auch Prüfungen im Zusammenhang mit dem Status der Kasse bzw. der Signatur-/Siegelerstellungseinheit durchgeführt.", "verificationState" : "FAIL", "verificationTimestamp" : "2017-10-02T11:11:43.638+02:00", "verificationResultList" : [ { "verificationId" : "CRYPTO", "version" : 1, "verificationName" : "Kryptographische Prüfungen", "verificationTextualDescription" : "In diesem Modul und den dazugehörigen Submodulen werden die kryptographische Validität des Umsatzzählers und des Signaturwerts überprüft. Für den Umsatzzähler kann eine detaillierte Prüfung nur beim Startbeleg durchgeführt werden, da nur in diesem Fall der entschlüsselte Wert bekannt ist (Umsatzzähler = 0).", "verificationState" : "FAIL", "verificationTimestamp" : "2017-10-02T11:11:43.653+02:00", "verificationResultList" : [ { "verificationId" : "CRYPTO_SIGNATURE", "version" : 1, "verificationName" : "Kryptographie: Überprüfung der kryptographischen Gültigkeit der Signatur", "verificationTextualDescription" : "In diesem Modul wird die kryptographische Gültigkeit der Signatur mit Hilfe des öffentlichen Schlüssels überprüft.", "verificationState" : "FAIL", "verificationResultDetailedMessage" : "Die kryptographische Gültigkeit der Signatur ist nicht gegeben. Es scheint aber nicht der definierte Fall der ausgefallenen Sicherheitseinrichtung zuzutreffen.", "verificationTimestamp" : "2017-10-02T11:11:43.654+02:00" } ] } ] } ] }

ErichFreitag commented 6 years ago

Das was in der Fehlermeldung steht: Die kryptographische Gültigkeit der Signatur ist nicht gegeben.

Fehlersuche: PDF-Dokument https://github.com/a-sit-plus/at-registrierkassen-mustercode/blob/master/Dokumente/2016-12-12%20SIG-Check.pdf und die Issues zu diesem Thema in diesem Forum durcharbeiten.

Geht leider nicht anders. Ohne Detailprüfung: ihr Signaturwert sieht viel zu lang aus und ist möglicherweise falsch codiert.

cotasgmbh commented 6 years ago

Danke...

cotasgmbh commented 6 years ago

Hallo, sehe ich das richtig, dass der Header immer 'ES256' ist?

Wenn ja, dann bekomme ich als Header: eyJhbGciOiJFUzI1NiJ9

und als

Payload: X1IxLUFUM19DT1RBU18xXzIwMTctMTAtMDJUMTE6MDA6MDBfMCwwMF8wLDAwXzAsMDBfMCwwMF8wLDAwX1lGS1JpWnRxY2QweXZxRGd2MUFwbHc9PV81MTdlYzgyMTg3NzJfRVhnQWltQzluejg9

Diese Werte zusammengeführt ergibt: eyJhbGciOiJFUzI1NiJ9.X1IxLUFUM19DT1RBU18xXzIwMTctMTAtMDJUMTE6MDA6MDBfMCwwMF8wLDAwXzAsMDBfMCwwMF8wLDAwX1lGS1JpWnRxY2QweXZxRGd2MUFwbHc9PV81MTdlYzgyMTg3NzJfRVhnQWltQzluejg9

Davon den SHA-256: 17bc2f9e52731fb229e4c12b2d4fa1c8

Und jetzt wird´s komisch:

Den SHA-256 signieren!?!: eyJhbGciOiJFUzI1NiJ9.MTdiYzJmOWU1MjczMWZiMjI5ZTRjMTJiMmQ0ZmExYzg.PvhwQRD_i4bLlfO0ybNSJBh7oRU0l8vaz3IFv2Pdilj2u1bSZyqOOLDhqDlxZ9iIRk516TGkV_SFxJ99sZShSQ

und davon den Base64?: ZXlKaGJHY2lPaUpGVXpJMU5pSjkuTVRkaVl6Sm1PV1UxTWpjek1XWmlNakk1WlRSak1USmlNbVEwWm1FeFl6Zy5Qdmh3UVJEX2k0YkxsZk8weWJOU0pCaDdvUlUwbDh2YXozSUZ2MlBkaWxqMnUxYlNaeXFPT0xEaHFEbHhaOWlJUms1MTZUR2tWX1NGeEo5OXNaU2hTUQ==

Ist das richtig gedacht oder bin ich damit komplett falsch?

ErichFreitag commented 6 years ago

Das ist ein wenig falsch, siehe folgendes Bild und A-SIT-Dokumentation.

pqrst_rksv_datenmodell_signaturerstellung

AxelKutschera commented 6 years ago

Hallo Erich, ich habe das Gefühl, dass diese Fragen vermehrt auftreten. Vielleicht hilft manchmal unser Interface? https://www.fiskaltrust.at/products/fiscalization/ Neben den technischen Anforderungen gibt es dann noch einige mitunter komplexe Abläufe zu erfüllen...

cotasgmbh commented 6 years ago

Hallo zusammen, ich habe jetzt sämtliche Diagramme und Hinweise durchgearbeitet und komme auf folgende Ausgabe:

_R1-AT3_COTAS_1_2017-10-03T12:00:00_0,00_0,00_0,00_0,00_0,00_YFKRiZtqcd0=_517ec8218772_EXgAimC9nz8=_txnL0vlgYig7/w5A55p7M646FfCaHcpTy07rZoku+F66aVm+D5oobx4lqD52hRvLIBCTJLrfZ7gbW7qmJskilw==

Das Zertifikat wurde auch noch einmal getestet und ist gültig.

Der Fehler bleibt leider gleich:

{ "verificationId" : "VERIFICATION_FROM_CASHBOX", "version" : 1, "verificationName" : "Prüfergebnis - Kasse", "verificationTextualDescription" : "Bei der Belegprüfung wird untersucht, ob die Vorgaben der RKSV in Bezug auf den maschinenlesbaren Code am Beleg und auf die meldepflichtigen Metadaten der Sicherheitseinrichtung befolgt werden. Im Fehlerfall sind die genauen Fehlerinformationen nachfolgend angeführt.", "verificationState" : "FAIL", "verificationResultDetailedMessage" : "Der vorliegende Beleg weist Fehler im maschinenlesbaren Code auf. Am besten, Sie übermitteln zur Problembehandlung die nachfolgende Fehlerbeschreibung an Ihren Kassenhersteller.", "verificationTimestamp" : "2017-10-03T14:10:09.609+02:00", "verificationResultList" : [ { "verificationId" : "RECEIPT_FULL", "version" : 1, "verificationName" : "Detailprüfung des maschinenlesbaren Codes", "verificationTextualDescription" : "Dieses Modul und die dazugehörigen Submodule überprüfen die Gültigkeit des Belegs. Dabei werden sowohl Formatprüfungen, kryptographische Prüfungen (verschlüsselter Umsatzzähler, Signatur) als auch Prüfungen im Zusammenhang mit dem Status der Kasse bzw. der Signatur-/Siegelerstellungseinheit durchgeführt.", "verificationState" : "FAIL", "verificationTimestamp" : "2017-10-03T14:10:09.703+02:00", "verificationResultList" : [ { "verificationId" : "CRYPTO", "version" : 1, "verificationName" : "Kryptographische Prüfungen", "verificationTextualDescription" : "In diesem Modul und den dazugehörigen Submodulen werden die kryptographische Validität des Umsatzzählers und des Signaturwerts überprüft. Für den Umsatzzähler kann eine detaillierte Prüfung nur beim Startbeleg durchgeführt werden, da nur in diesem Fall der entschlüsselte Wert bekannt ist (Umsatzzähler = 0).", "verificationState" : "FAIL", "verificationTimestamp" : "2017-10-03T14:10:09.757+02:00", "verificationResultList" : [ { "verificationId" : "CRYPTO_SIGNATURE", "version" : 1, "verificationName" : "Kryptographie: Überprüfung der kryptographischen Gültigkeit der Signatur", "verificationTextualDescription" : "In diesem Modul wird die kryptographische Gültigkeit der Signatur mit Hilfe des öffentlichen Schlüssels überprüft.", "verificationState" : "FAIL", "verificationResultDetailedMessage" : "Die kryptographische Gültigkeit der Signatur ist nicht gegeben. Es scheint aber nicht der definierte Fall der ausgefallenen Sicherheitseinrichtung zuzutreffen.", "verificationTimestamp" : "2017-10-03T14:10:09.772+02:00" } ] } ] } ] }

Langsam bin ich ratlos. Irgendwas muss ich ja übersehen!?!

ErichFreitag commented 6 years ago

Abgesehen von der Idee von @AxelKutschera gibt es leider keine Möglichkeit, Fehler bei der Signaturerstellung nachzuvollziehen. Einzig die korrekte Codierung und die korrekte Länge der Signatur können auf einen Blick geprüft werden. Die gute Nachricht: die Länge passt, das Format passt und die Codierung passt auch.

Jetzt gibt es folgende weitere Möglichkeiten:

Da müssen sie leider step für step durch.

cotasgmbh commented 6 years ago

Guten Morgen,

ich habe noch eine Frage zum Zertifikat. Wenn ich die PEM Datei vom Zertifikat abrufen bekomme ich folgendes (stark gekürzt):

-----BEGIN CERTIFICATE----- MIIEezCCAmOgAwIBAgIGUX7IIYdyMA0GCSqGSIb3DQEBCwUAMEoxCzAJBgNVBAYT AkFUMRcwFQYDVQQKEw5QcmltZVNpZ24gR21iSDEiMCAGA1UEAxMZUHJpbWVTaWdu ... -----END CERTIFICATE-----

Ich entferne die 1. und letzte Zeile (BEGIN / END), nehme alle Zeilenumbrüche raus und entferne alle Leerstellen. Dies wird dann im CRYPTOGRAPHIC-MATERIAL-FILE hinterlegt.

Ist das soweit richtig?

cotasgmbh commented 6 years ago

Hallo, der DEP Export ergibt folgende Meldung:

{ "verificationId" : "VERIFICATION_FROM_CASHBOX", "version" : 1, "verificationName" : "Prüfergebnis - Kasse", "verificationTextualDescription" : "Bei der Belegprüfung wird untersucht, ob die Vorgaben der RKSV in Bezug auf den maschinenlesbaren Code am Beleg und auf die meldepflichtigen Metadaten der Sicherheitseinrichtung befolgt werden. Im Fehlerfall sind die genauen Fehlerinformationen nachfolgend angeführt.", "verificationState" : "FAIL", "verificationResultDetailedMessage" : "Der vorliegende Beleg weist Fehler im maschinenlesbaren Code auf. Am besten, Sie übermitteln zur Problembehandlung die nachfolgende Fehlerbeschreibung an Ihren Kassenhersteller.", "verificationTimestamp" : "2017-10-05T10:56:56.200+02:00", "verificationResultList" : [ { "verificationId" : "CONSTRAINTS_PRE_DB", "version" : 1, "verificationName" : "Minimalanforderungen an den maschinenlesbaren Code vor Detailprüfungen", "verificationTextualDescription" : "In diesem Modul und den dazugehörigen Submodulen werden verschiedene Minimalanforderungen an den maschinenlesbaren Code überprüft bevor weitere Detailprüfungen durchgeführt werden.", "verificationState" : "FAIL", "verificationTimestamp" : "2017-10-05T10:56:56.298+02:00", "verificationResultList" : [ { "verificationId" : "FORMAT_CHECK_TIMEANDDATE", "version" : 1, "verificationName" : "Formatprüfung: Format des Belegerstellungszeitpunktes", "verificationTextualDescription" : "Es wird überprüft ob der Belegerstellungszeitpunkt im korrekten Format im maschinenlesbaren Code abgebildet ist.", "verificationState" : "FAIL", "verificationTimestamp" : "2017-10-05T10:56:56.311+02:00" } ] } ] }

Aber was soll da am Datum nicht stimmen?

[ "_R1-AT3_COTAS_1_2017-10-05T09:30:00_0,00_0,00_0,00_0,00_0,00_YFKRiZtqcd0=_517ec8218772_EXgAimC9nz8=_fTPWXwLYaiPohm82OUZvr2YxJKWyGvMokN0aqtRUj0pryqFWXeSTZtmd4qYo+qn0fpSFoCBdQZuJURxmOSPMbA==" ]

bzw.

{ "Belege-Gruppe" : [ { "Signaturzertifikat" : "", "Zertifizierungsstellen" : [ ], "Belege-kompakt" : [ "eyJhbGciOiJFUzI1NiJ9.X1IxLUFUM19DT1RBU18xXzIwMTctMTAtMDVUMDklM0EzMCUzQTAwXzAlMkMwMF8wJTJDMDBfMCUyQzAwXzAlMkMwMF8wJTJDMDBfWUZLUmladHFjZDA9XzUxN2VjODIxODc3Ml9FWGdBaW1DOW56OCUzRA.fTPWXwLYaiPohm82OUZvr2YxJKWyGvMokN0aqtRUj0pryqFWXeSTZtmd4qYo+qn0fpSFoCBdQZuJURxmOSPMbA" ] } ] }

ErichFreitag commented 6 years ago

ad Zertifikat: ja, korrekt. Leerzeichen sind allerdings nicht üblicherweise enthalten

ad Datum: der BASE64-decodierte DEP-Eintrag ergibt "_R1-AT3_COTAS_1_2017-10-05T09%3A30%3A00_0%2C00_0%2C00_0%2C00_0%2C00_0%2C00_YFKRiZtqcd0=_517ec8218772_EXgAimC9nz8%3D" -da ist in der Codierung noch was faul.

Probieren sie parallel das Einzelbeleg-Tool, dort wird der maschinenlesbare Code verwendet.

cotasgmbh commented 6 years ago

Ich glaub es ja nicht. Die Kodierung war das Problem. Und auf einmal läuft alles. Vielen Dank für die Unterstützung :-)