it-swarm.com.de

Verwenden Sie 'openssl cms verify / decrypt', um Inhalte abzurufen, die von einer fremden Java Bibliothek) verschlüsselt und signiert wurden

Ich versuche, eine von einem Drittanbieter generierte Nachricht zu entschlüsseln und zu überprüfen Java Framework. Das Zip-Archiv des letzteren hier zu finden und der RFC- konforme Zertifikate werden in einen Dropbox-Speicher hochgeladen .

Dieser Befehl bringt mir fast das richtige Ergebnis:

openssl cms -verify -in message_from_alice_for_bob.msg -inform DER -CAfile ehealth_root_ca.cer | openssl cms -decrypt -inform DER -recip bob_etk_pair.pem  | openssl cms -inform DER -cmsout -print

Ich kann die richtige Nachricht in eContent sehen, aber wie kann ich diese extrahieren? Das einzige Ergebnis, das ich brauche, ist: This is a secret message from Alice for Bob written at Thu Mar 13 12:39:12 CET 2014

Verification successful
CMS_ContentInfo:
  contentType: pkcs7-signedData (1.2.840.113549.1.7.2)
  d.signedData:
    version: 1
    digestAlgorithms:
        algorithm: sha256 (2.16.840.1.101.3.4.2.1)
        parameter: NULL
    encapContentInfo:
      eContentType: pkcs7-data (1.2.840.113549.1.7.1)
      eContent:
        0000 - 54 68 69 73 20 69 73 20-61 20 73 65 63 72 65   This is a secre
        000f - 74 20 6d 65 73 73 61 67-65 20 66 72 6f 6d 20   t message from
        001e - 41 6c 69 63 65 20 66 6f-72 20 42 6f 62 20 77   Alice for Bob w
        002d - 72 69 74 74 65 6e 20 61-74 20 54 68 75 20 4d   ritten at Thu M
        003c - 61 72 20 31 33 20 31 32-3a 33 39 3a 31 32 20   ar 13 12:39:12
        004b - 43 45 54 20 32 30 31 34-                       CET 2014
    certificates:
      <ABSENT>
    crls:
      <ABSENT>
    signerInfos:
        version: 1
        d.issuerAndSerialNumber:
          issuer: C=BE, O=Federal Government, OU=eHealth-platform Belgium, CN=eH CA
          serialNumber: 11687039761893623079
        digestAlgorithm:
          algorithm: sha256 (2.16.840.1.101.3.4.2.1)
          parameter: NULL
        signedAttrs:
            object: contentType (1.2.840.113549.1.9.3)
            set:
              OBJECT:pkcs7-data (1.2.840.113549.1.7.1)

            object: signingTime (1.2.840.113549.1.9.5)
            set:
              UTCTIME:Mar 13 11:39:12 2014 GMT

            object: messageDigest (1.2.840.113549.1.9.4)
            set:
              OCTET STRING:
                0000 - 76 64 f2 6c 21 f7 8e 53-ea 12 42 03 38   vd.l!..S..B.8
                000d - a8 17 ff cc 5e 41 07 ed-ad 14 3b ab 49   ....^A....;.I
                001a - d0 b2 87 74 db f4                        ...t..
        signatureAlgorithm:
          algorithm: rsassaPss (1.2.840.113549.1.1.10)
          parameter: SEQUENCE:
    0:d=0  hl=2 l=  52 cons: SEQUENCE
    2:d=1  hl=2 l=  15 cons:  cont [ 0 ]
    4:d=2  hl=2 l=  13 cons:   SEQUENCE
    6:d=3  hl=2 l=   9 prim:    OBJECT            :sha256
   17:d=3  hl=2 l=   0 prim:    NULL
   19:d=1  hl=2 l=  28 cons:  cont [ 1 ]
   21:d=2  hl=2 l=  26 cons:   SEQUENCE
   23:d=3  hl=2 l=   9 prim:    OBJECT            :mgf1
   34:d=3  hl=2 l=  13 cons:    SEQUENCE
   36:d=4  hl=2 l=   9 prim:     OBJECT            :sha256
   47:d=4  hl=2 l=   0 prim:     NULL
   49:d=1  hl=2 l=   3 cons:  cont [ 2 ]
   51:d=2  hl=2 l=   1 prim:   INTEGER           :20
        signature:
          0000 - a9 d1 19 05 47 5c 9c 57-db 94 5f f3 3a 25 55   ....G\.W.._.:%U
          000f - b7 60 87 cd 07 02 43 16-21 a7 11 d6 a5 b4 be   .`....C.!......
          001e - 0f 46 d3 a6 2c 8c e8 1d-9b be 34 b1 49 38 85   .F..,.....4.I8.
          002d - 8b 26 b3 b7 3e 11 dd 6e-45 b7 42 d1 3c fe 87   .&..>..nE.B.<..
          003c - 92 52 9a 08 24 9e b8 bf-36 23 09 d0 7e 93 c5   .R..$...6#..~..
          004b - d7 b7 65 11 32 57 83 bc-71 e4 6f cd 2e 56 23   ..e.2W..q.o..V#
          005a - 64 e6 2d 53 23 a8 2d 73-92 fd a8 d7 1f 3e 02   d.-S#.-s.....>.
          0069 - ef 4e bc 46 dc d2 39 53-1d 12 7c 93 02 25 25   .N.F..9S..|..%%
          0078 - 59 40 72 e7 7b 51 3b fd-27 4d ab 21 3f 14 5c   [email protected]{Q;.'M.!?.\
          0087 - 77 b8 18 0b 8d 6c 9d b9-ab 7e b6 45 b3 bc d8   w....l...~.E...
          0096 - 79 36 06 22 aa b7 12 13-0c 0e 57 e9 fa ea 4c   y6."......W...L
          00a5 - 3e a4 07 de 6a 10 13 69-e9 c8 70 f2 ad f2 26   >...j..i..p...&
          00b4 - f0 71 96 e3 52 aa 74 b1-39 17 54 f1 b5 d8 d6   .q..R.t.9.T....
          00c3 - 2e 64 c2 f7 c5 d4 d3 52-1d 3c 83 61 65 9a 90   .d.....R.<.ae..
          00d2 - 39 07 a3 40 58 d1 53 1c-3c cf 67 49 e9 7a d3   [email protected]<.gI.z.
          00e1 - 3e 6c ac 83 51 e1 08 f4-eb e1 c5 54 58 b8 43   >l..Q......TX.C
          00f0 - d2 c0 2d 26 8f 16 53 c5-04 f0 36 b1 1f 2e 54   ..-&..S...6...T
          00ff - ec                                             .
        unsignedAttrs:
          <EMPTY>

Wenn ich das versuche:

openssl cms -verify -in message_from_alice_for_bob.msg -inform DER -CAfile ehealth_root_ca.cer | openssl cms -decrypt -inform DER  -recip bob_etk_pair.pem  | openssl cms -verify -inform DER

Ich erhalte diesen Fehler:

Verification successful
Verification failure
4433208768:error:2E09D08A:CMS routines:CMS_verify:signer certificate not found:crypto/cms/cms_smime.c:304:

Ich bin nicht sicher, welches Zertifikat hier erwartet wird?

Einige zusätzliche Informationen aus der Dokumentation:

Informationen zur Verschlüsselungsmethode:

Da die Nachrichtensicherheit auf Integrität, Authentizität und Vertraulichkeit beruht, reicht es nicht aus, eine Nachricht nur zu signieren und zu verschlüsseln. Das Signieren und Verschlüsseln garantiert keine Nachrichtenauthentizität, da es für die „heimliche Weiterleitung“ anfällig ist. Eine dreifach verpackte Nachricht ist eine Nachricht, die signiert, verschlüsselt und dann erneut signiert wurde. Weitere Einzelheiten zu diesen Prinzipien und den Gründen, warum Triple Wrapping erforderlich ist, finden Sie in dem Artikel „Defektes Signieren und Verschlüsseln in S/MIME, PKCS Nr. 7, MOSS, PEM, PGP und XML“ - Donald T. Davis (MIT )

Informationen zum Entschlüsseln (Entsiegeln):

Das Authentifizierungszertifikat des Absenders ist in jeder Nachricht enthalten.

Das scheint richtig zu sein:

openssl cms -verify -in message_from_alice_for_bob.msg -inform DER -CAfile ehealth_root_ca.cer -cmsout -print  | grep -B 4 11687039761893623079

Ausgabe:

    certificates:
      d.certificate:
        cert_info:
          version: 2
          serialNumber: 11687039761893623079
--
    signerInfos:
        version: 1
        d.issuerAndSerialNumber:
          issuer: C=BE, O=Federal Government, OU=eHealth-platform Belgium, CN=eH CA
          serialNumber: 11687039761893623079

Es gibt auch eine . Net-Bibliothek , die die Entschlüsselung durchführt.

4
r03

Zuerst sollten Sie wissen, dass ein Teil der Antwort auf Ihre Frage ein opensslFehlerbericht I ist habe gerade eingereicht.

Sowohl openssl cms -sign Als auch openssl cms -verify Behandeln nur S/MIME-Inhalte. Zufällig können sie auch beliebige Textdaten verarbeiten (obwohl nicht versprochen wird, dass diese Funktionalität in zukünftigen Versionen beibehalten wird), sie sind jedoch nicht dafür ausgelegt, verschlüsselte Binärdaten zu signieren oder zu verifizieren, einschließlich, aber nicht beschränkt auf verschlüsselte DER -codierte Nachrichten, wie es in Ihrem Fall der Fall ist (obwohl die Manpage cms(1) davon ausgeht, dass dies immer noch möglich ist).

Was nicht weniger wichtig ist, diese beiden würden nicht erkennen, ob die Eingabe in einem anderen Format vorliegt, und stattdessen stillschweigend mit einer (etwas undurchsichtigen) Fehlermeldung fehlschlagen:

$ cat msg.txt
This is a secret message from Alice for Bob written at Thu Mar 13 12:39:12 CET 2014
$ 
$ openssl cms -encrypt -outform DER -aes-256-cbc -in msg.txt cert.pem \
| openssl cms -sign -md sha256 -signer cert.pem -inkey key.pem -nodetach -outform DER \
| openssl cms -verify -inform DER -CAfile ca.pem -out msg_ver.txt
Verification successful
$
$ openssl cms -cmsout -in msg_ver.txt -print
Error reading S/MIME message
4404864620:error:0D0D40D1:asn1 encoding routines:SMIME_read_ASN1:no content type:asn_mime.c:440:
$ 
$ openssl cms -cmsout -in msg_ver.txt -inform DER -print
Error reading S/MIME message
4527457900:error:0D06B08E:asn1 encoding routines:ASN1_D2I_READ_BIO:not enough data:a_d2i_fp.c:247:
$

NB: Dies ist ab 1.0.2r sowie 1.1.1bopenssl Versionen - die neuesten zum Zeitpunkt des Schreibens.

In zukünftigen Versionen würde dies wahrscheinlich genauso bleiben, obwohl Sie dies besser noch einmal überprüfen sollten, wenn Sie dies um 2020 lesen.

Ich werde versuchen, die Antwort zu aktualisieren, sobald sich das Verhalten ändert, obwohl ich keine Verantwortung dafür übernehme, dies nicht zu tun.

Zweitens ist die angezeigte Ausgabe eine korrekte entschlüsselte Nachricht in ihrer Gesamtheit.

Aus mir unbekannten Gründen hat jedoch derjenige, der Ihnen die verschlüsselte Datei zur Verfügung gestellt hat, nicht nur den normalen encrypt[1] -> sign[2] - Weg eingeschlagen, sondern stattdessen sign[1] -> encrypt[2] -> sign[3]. Die Signierung in den Schritten 1 und 3 erfolgte mit unterschiedlichen Zertifikaten mit den Seriennummern a2:30:b4:be:2b:89:05:27 Und a2:30:b4:be:2b:89:05:23.

Sie haben die Rückwärtsschritte 3 und 2 korrekt ausgeführt. Um die letzte Signatur aus Schritt 1 zu überprüfen, müssen Sie ein Zertifikat mit der Seriennummer a2:30:b4:be:2b:89:05:27, und das von Ihnen bereitgestellte Zertifikat hat eine Seriennummer a2:30:b4:be:2b:89:05:23, vier ausgestellte Zertifikate entfernt von dem, was Sie hätten haben sollen.

So können Sie die Seriennummer eines Zertifikats ermitteln:

$ openssl x509 -in ehealth_root_ca.cer -noout -text | grep -A1 'Serial Number:'
        Serial Number:
            a2:30:b4:be:2b:89:05:23
$

Möglicherweise befindet sich das erforderliche Zertifikat irgendwo in den Quellen oder Beispielen von der Bibliothek, auf die Sie sich beziehen .

(Hier ist ein kurzes openssl cms Kochbuch falls Sie es brauchen - obwohl es nicht so aussieht, als ob Sie tun.)

4
ximaera