Closed cotasgmbh closed 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.
Danke...
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?
Das ist ein wenig falsch, siehe folgendes Bild und A-SIT-Dokumentation.
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...
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!?!
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:
mit welchem Tool prüfen sie das und erhalten obige Ausgabe? Mit dem Tool für den Einzelbeleg oder mit dem Tool für den DEP-Export? Der DEP-Export ist in der Signatur nochmals anders codiert
das Zertifikat mag gültig sein, prüfen sie es nochmals in Hinblick darauf, dass sie auch das richtige Zertifikat für die Signatur verwenden. Einige Hinweise darauf gibt es z.B. im https://github.com/a-sit-plus/at-registrierkassen-mustercode/issues/21
prüfen sie die verwendete API, die sie zur Signatur verwenden. Wenn die Dokumentation nicht aussagekräftig genug ist müssen sie experimentieren - manche Signaturerstellung braucht den Hash-Wert, andere brauchen die Plain-Daten.
liefert die Signaturerstellung ein Format R||S-codiert oder im DER-Format? (siehe A-SIT-Folien Sig.Check Seite 10)
bauen sie ein paar Traces/Debug-Meldungen ein und schauen sie sich die Zwischenergebnisse an. Passen die Längen der Daten? Passen die Codierungen? Stimmen die Daten soweit prüfbar in jedem Schritt der Signaturerstellung?
Da müssen sie leider step für step durch.
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?
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" ] } ] }
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.
Ich glaub es ja nicht. Die Kodierung war das Problem. Und auf einmal läuft alles. Vielen Dank für die Unterstützung :-)
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" } ] } ] } ] }