2016-10-29 4 views
1

Ich möchte ein Java-Objekt an einen Server senden und seine Signatur über einen anderen Weg an den Server senden. Dazu muss ich es in JSON konvertieren und dann ein Signaturformular JSON erstellen. Ich weiß, dass ich ein signiertes Token mit JOSE erstellen kann, aber es wird auch Objektdaten an das Token anhängen, und es macht Token zu lang. Außerdem ist es erforderlich, ein Objekt mehrere Male von verschiedenen Unterzeichnern zu signieren.Kryptographie - Wie signiere ich ein JSON-Objekt in Java?

Gibt es einen Standard oder ein Tool (mindestens für Java/Javascript), um sicherzustellen, dass die Konversation von JSON zu string immer im eindeutigen Format dargestellt wird?

Ist es möglich, den zweiten Teil von JWT, der JSON-Daten enthält, zu entfernen und mit einem beliebigen JSON-Ersteller zu erstellen?

Wenn nicht die Antworten ja sind, was soll ich tun?

Antwort

1

JOSE ist ein Framework, kein Standard. JSON Web Signature (JWS) ist ein Standard in RFC 7515 definiert, und J SON Web Token (JWT) ist ein kompaktes Token-Format JWS Signatur in RFC 7519

definiert unter Verwendung Gibt es eine Standard- oder Werkzeug (bei mindestens für Java/Javascript), um sicherzustellen, dass die Konversation von JSON zu String immer im eindeutigen Format dargestellt wird?

Ja, definiert JWS dass JWS Payload als BASE64URL kodiert wird (UTF-8 (JWS Payload))

Ist es möglich, den zweiten Teil des JWT wegzulassen, die JSON Daten enthält, und erstellen eine beliebige in Verwendung JSON-Ersteller?

Sie können den zweiten Teil von JWT (die Nutzlast) weglassen, aber dann wird es kein JWT sein. Ich denke, dass Sie JWT nicht benötigen (der Zweck von JWT ist Austauschauthentifizierungstoken), aber wenden Sie eine digitale Unterschrift auf Ihr Dokument an. Und JWS eignet sich dafür

Aber mit mehreren Unterzeichnern benötigen Sie eine zusätzliche Schicht von digitalen Signaturfunktionen. Um beispielsweise die Identität des Unterzeichners einzubeziehen, können Sie den signierten Inhalt mit dem Unterzeichner verknüpfen oder die Reihenfolge der Unterschriften festlegen.

Leider gibt es keinen Standard, dies zu tun, wie XAdES, PAdES oder CAdES für XML, PDF und binäre Dokumente

+0

Ich glaube, dass 'BASE64URL (UTF8 (JWS Payload))' wird nicht garantieren Einzigartigkeit gleicher Objekte . Laut [diesem Beitrag] (http://stackoverflow.com/a/4670638/1385652) gibt es mehrere Möglichkeiten, ein JSON-Objekt in String anzuzeigen und 'BASE64URL (UTF8 (JWS Payload))' einfach nicht berücksichtigt und entfernen Payload Part macht es uns unmöglich, die Signatur der Payload zu verifizieren. –

+0

Beachten Sie, dass in dem Beitrag von der Signierung eines JSON-Objekts die Rede ist und dass der Inhalt vor dem Signieren kanonisiert werden muss. JWS führt die Kanonisierung durch, indem es das JSON-Objekt als base64url serialisiert. Zwei verschiedene Werte können nicht den gleichen base64-Wert generieren (siehe http://stackoverflow.com/questions/30429168/is-a-base64-encoded-string-unique), aber die base64-Serialisierung führt immer zum selben Ergebnis – pedrofb

Verwandte Themen