Closed grafuzzi closed 5 years ago
Hallo! Also die cryptographicMaterialContainer.json sieht korrekt aus. Allerdings ist bei den Belegen im DEP nur der payload enthalten. Header und signature fehlen. Ich vermute, dass das Prüftool dadurch keinen der DEP-Belege lesen kann und daher auch nicht die verwendete Zertifikatsseriennummer aus dem ersten Beleg mit jenem aus der cryptographicMaterialContainer.json abgleichen kann und die obenstehende Fehlermeldung ausgiebt.
Hallo WienerroitherM,
danke für die schnelle Antwort. Nach deinem hinweis habe ich mir den Code nochmal angesehen. Ich glaube du hast recht und die Signatur fehlt. Der Header mit {"alg":"ES256"} sollte laut Code an das Payload angefügt sein. Oder sehe ich das falsch?
aktuell habe ich das wie folgt umgesetzt.
byte[] sigCertBytes = sigCert.Export(X509ContentType.Cert);
byte[] issCertBytes = issuerCert.Export(X509ContentType.Cert);
sigCertBase64 = Convert.ToBase64String(sigCertBytes);
issCertBase64 = Convert.ToBase64String(issCertBytes);
string jwsProtectedHeader = Base64url("{\"alg\":\"ES256\"}");
string jwsPayload = jwsBelegeKompakt = Base64url(inputToCrypt);
string toBeSignedStr = string.Format("{0}.{1}", jwsProtectedHeader, jwsPayload);
//sollte dann so aussehen
//DUMMY Code
string toBeSignedStr = string.Format("{0}.{1}.{2}", jwsProtectedHeader, jwsPayload**, sigCertBase64**);
//DUMMY Code
byte[] tbsBytes = Encoding.UTF8.GetBytes(toBeSignedStr);
byte[] signature;
ret = rkw.Sign(tbsBytes, out signature);
Das ist vermutlich auch die Lösung des Problems warum die BMF Belegscheck APP einen "Allgemeiner Fehler - Belegprüfung fehlgeschlagen. Bitte überprüfen sie den Beleg" wirft?
Danke, grafuzzi
Den Code kann ich leider nicht beurteilen, aber das Ergebnis sollte so aufgebaut sein: header.payload.signature
Also die korrekte Darstellung deines ersten Belegs im DEP wäre zB: eyJhbGciOiJFUzI1NiJ9.X1IxLUFUMV83MjEyMDI2MjY2MzEyOF84ODk2XzIwMTktMDEtMTRUMDk6Mzg6MjVfMCwwMF8wLDAwXzAsMDBfMCwwMF8wLDAwX0E3b2c1aFZaVnhDZEZyYjhNeHk4Y2c9PV8wNTNBMEVFNV8rWk5TKzBSY2cxUT0.Signatur BASE64-URL
Hoffe das hilft!
Danke das Hilft mir schon mal sehr weiter um das ganze besser zu verstehen.
Leider muss ich dazu noch eine Frage stellen - sorry - bei der Darstellung deines erstens Belegs werden die Punkte aber nicht "sichtbar" oder doch?
ich hätte es so verstanden: Header ist {\"alg\":\"ES256\"} als BASE64 Payload ist _R1-AT1_Kassenidentifikation_Belegnummer_Datum_GesamtBetrag_Betrag10%_Betrag20%_Betrag00%_BetragBesonders_Umsatzzähler_ZertifikatSeriennummerHex_signaturVorherigerBeleg als BASE64 Signatur als BASE64
das ganze Header, Payload und Signatur mit "." verketten und dann nochmal als BASE64 als JWS-Beleg-kompakt verwenden
dann sind aber keine Punkte mehr "sichtbar" im Endergebnis? oder sehe ich das falsch
Doch - die 3 bereits BASE64-URL codierten Werte werden mit dem Trennzeichen "." aneinandergereiht. Danach erfolgt keine weitere Codierung der gesamten Kette - der Beleg sieht im DEP dann wirklich so aus wie oben.
vielen herzlichen dank
ich werde das heute mal so umsetzen und testen
nach dem Wochende ist das ersehnte "PASS" durch das Prüftool jetzt vorhanden.
Danke nochmal für die Hilfe.
Vielleicht noch eine Frage am Rande, aus Interesse, Warum ist/muss im DEP-export.json keine Signaturzertifikat und/oder Zertifizierungsstellen angegeben werden? Ich habe bei einem Kollegen gesehen das in seinem DEP-export keine Einträge dazu vorhanden sind.
Danke, grafuzzi
Muss ja nicht vorhanden sein ( siehe auch RKSV-Dokumentationen ) Für das Prüftool steht alles relevante in der cryptographicMaterialContainer.json und in FON ist ebenso alles relevante ja mit der kassaanmeldung/aktivierung vorhanden
Danke für die Unterstützung
Guten Abend,
beim Tests der Belege (DEP Export) mittels dem Testtool (regkassen-verification-1.1.1.zip) bekomme ich immer die Fehlermeldung "verificationResultDetailedMessage" : "Die Prüfung des Belegs konnte nicht vollständig durchgeführt werden. Vermutlich konnte das Zertifikat oder der Schlüssel mit der im Beleg angegeben Seriennummer bzw. dem angegebenen Ordnungsbegriff des Unternehmens und der Schlüssel-ID nicht in der cryptographicMaterialContainer.json Datei gefunden werden. Bitte überprüfen Sie diese Datei und die darin hinterlegten Informationen. Diese Fehlermeldung ist nur im Prüftool relevant und wird in dieser Form nicht bei der Echtprüfung über FinazOnline vorkommen.",
Ich habe schon alles überprüft. bin auch schon alle Einträge in diesem Repo durchgegangen. Doch leider ist es für mich sehr schwierig die richtigen Inhalte für die Datei "cryptographicMaterialContainer.json" zu finden.
Die Inhalte habe ich einmal angefügt. Ich habe schon die Überprüfung über https://certlogik.com/decoder/ durchgeführt. Die Eingabe für base64AESKey und den HEX Code (Case Sensitiv). Das Ergebnis ist meines erachtens richtig.
Ich bitte um Hilfe - ich sehe den Wald vor lauter Bäumen nicht mehr
Anbei meine cryptographicMaterialContainer.json.txt und ein auszug aus dem DEP cryptographicMaterialContainer.json.txt datenerfassungsprotokoll.zip
Danke, grafuzzi