rilettura decodi openssl pubkey

0

Stavo giocando con openssl solo per vedere come funziona la lettura della chiave pubblica da un certificato;

Ho dato un certificato "letsencrypt.pem" che ho, ho dato questi comandi.

  1. Vedi l'intero testo del certificato: openssl x509 -in letsencrypt.pem -text

    Che, in particolare, fornisce la chiave pubblica come:

Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:9c:d3:0c:f0:5a:e5:2e:47:b7:72:5d:37:83:b3: 68:63:30:ea:d7:35:26:19:25:e1:bd:be:35:f1:70: 92:2f:b7:b8:4b:41:05:ab:a9:9e:35:08:58:ec:b1: 2a:c4:68:87:0b:a3:e3:75:e4:e6:f3:a7:62:71:ba: 79:81:60:1f:d7:91:9a:9f:f3:d0:78:67:71:c8:69: 0e:95:91:cf:fe:e6:99:e9:60:3c:48:cc:7e:ca:4d: 77:12:24:9d:47:1b:5a:eb:b9:ec:1e:37:00:1c:9c: ac:7b:a7:05:ea:ce:4a:eb:bd:41:e5:36:98:b9:cb: fd:6d:3c:96:68:df:23:2a:42:90:0c:86:74:67:c8: 7f:a5:9a:b8:52:61:14:13:3f:65:e9:82:87:cb:db: fa:0e:56:f6:86:89:f3:85:3f:97:86:af:b0:dc:1a: ef:6b:0d:95:16:7d:c4:2b:a0:65:b2:99:04:36:75: 80:6b:ac:4a:f3:1b:90:49:78:2f:a2:96:4f:2a:20: 25:29:04:c6:74:c0:d0:31:cd:8f:31:38:95:16:ba: a8:33:b8:43:f1:b1:1f:c3:30:7f:a2:79:31:13:3d: 2d:36:f8:e3:fc:f2:33:6a:b9:39:31:c5:af:c4:8d: 0d:1d:64:16:33:aa:fa:84:29:b6:d4:0b:c0:d8:7d: c3:93 Exponent: 65537 (0x10001)

  1. Vedi la chiave pubblica in particolare: openssl x509 -in letsencrypt.pem -pubkey -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7No YzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf 15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K 671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+X hq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiV FrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3D kwIDAQAB -----END PUBLIC KEY-----

  2. Vedi il modulo della chiave pubblica in particolare: openssl x509 -in letsencrypt.pem -modulus Modulus=9CD30CF05AE52E47B7725D3783B3686330EAD735261925E1BDBE35F170922FB7B84B4105ABA99E350858ECB12AC468870BA3E375E4E6F3A76271BA7981601FD7919A9FF3D0786771C8690E9591CFFEE699E9603C48CC7ECA4D7712249D471B5AEBB9EC1E37001C9CAC7BA705EACE4AEBBD41E53698B9CBFD6D3C9668DF232A42900C867467C87FA59AB8526114133F65E98287CBDBFA0E56F68689F3853F9786AFB0DC1AEF6B0D95167DC42BA065B299043675806BAC4AF31B9049782FA2964F2A20252904C674C0D031CD8F31389516BAA833B843F1B11FC3307FA27931133D2D36F8E3FCF2336AB93931C5AFC48D0D1D641633AAFA8429B6D40BC0D87DC393

Mentre la 1a e la 3a uscita sembrano coerenti l'una con l'altra (i valori del modulo sono uguali), non riesco a capire cosa viene scritto all'interno della seconda uscita. Dal manuale di openssl x509 ho letto che è codificato in formato PEM, quindi sapendo che PEM non è più un codificato DER 64 codificato ho appena provato qualcosa del tipo:

echo "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQAB" | base64 -d | openssl x509 -inform DER -text

Per vedere se potevo ottenere una versione leggibile della chiave pubblica a partire dal formato PEM, base64 la decodifica e assegnandola ad openssl ad un file DER; ma ottengo questo errore:

unable to load certificate 140147034792384:error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag:../crypto/asn1/tasn_dec.c:1129: 140147034792384:error:0D06C03A:asn1 encoding routines:asn1_d2i_ex_primitive:nested asn1 error:../crypto/asn1/tasn_dec.c:693: 140147034792384:error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error:../crypto/asn1/tasn_dec.c:626:Field=serialNumber, Type=X509_CINF 140147034792384:error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error:../crypto/asn1/tasn_dec.c:626:Field=cert_info, Type=X509

Inoltre, non è possibile creare un file PEM e assegnarlo a openssl: openssl x509 -inform PEM -text -in test.pem (con lo snippet del secondo output di comando all'interno di test.pem)

unable to load certificate 139920384565696:error:0906D06C:PEM routines:PEM_read_bio:no start line:../crypto/pem/pem_lib.c:691:Expecting: TRUSTED CERTIFICATE

Forse si aspetta qualcosa come -----BEGIN CERTIFICATE----- invece di -----BEGIN PUBLIC KEY----- ?

Come posso leggere la chiave pubblica (possibilmente nel formato che desidero) iniziando dal secondo snippet di output dei comandi?

    
posta Alessio Martorana 28.09.2018 - 17:30
fonte

1 risposta

1

How can I read the public key (possibly in whatever format I want) starting from second command output snippet?

Utilizza il comando openssl pkey :

$ cat pubkey.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7No
YzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf
15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K
671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+X
hq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiV
FrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3D
kwIDAQAB
-----END PUBLIC KEY-----
$ openssl pkey -pubin -in pubkey.pem -text_pub -noout
Public-Key: (2048 bit)
Modulus:
    00:9c:d3:0c:f0:5a:e5:2e:47:b7:72:5d:37:83:b3:
    68:63:30:ea:d7:35:26:19:25:e1:bd:be:35:f1:70:
    92:2f:b7:b8:4b:41:05:ab:a9:9e:35:08:58:ec:b1:
    2a:c4:68:87:0b:a3:e3:75:e4:e6:f3:a7:62:71:ba:
    79:81:60:1f:d7:91:9a:9f:f3:d0:78:67:71:c8:69:
    0e:95:91:cf:fe:e6:99:e9:60:3c:48:cc:7e:ca:4d:
    77:12:24:9d:47:1b:5a:eb:b9:ec:1e:37:00:1c:9c:
    ac:7b:a7:05:ea:ce:4a:eb:bd:41:e5:36:98:b9:cb:
    fd:6d:3c:96:68:df:23:2a:42:90:0c:86:74:67:c8:
    7f:a5:9a:b8:52:61:14:13:3f:65:e9:82:87:cb:db:
    fa:0e:56:f6:86:89:f3:85:3f:97:86:af:b0:dc:1a:
    ef:6b:0d:95:16:7d:c4:2b:a0:65:b2:99:04:36:75:
    80:6b:ac:4a:f3:1b:90:49:78:2f:a2:96:4f:2a:20:
    25:29:04:c6:74:c0:d0:31:cd:8f:31:38:95:16:ba:
    a8:33:b8:43:f1:b1:1f:c3:30:7f:a2:79:31:13:3d:
    2d:36:f8:e3:fc:f2:33:6a:b9:39:31:c5:af:c4:8d:
    0d:1d:64:16:33:aa:fa:84:29:b6:d4:0b:c0:d8:7d:
    c3:93
Exponent: 65537 (0x10001)
$

Puoi anche usare questo strumento per convertire tra la chiave pubblica tra il formato PEM e DER:

$ openssl pkey -pubin -inform PEM -outform DER -in pubkey.pem -out pubkey.der

Dopo aver rimosso la chiave pubblica dal certificato, openssl x509 non era più lo strumento giusto, perché una chiave pubblica non è un certificato x.509. Allo stesso modo, quando provasti ad estrarre il DER dal PEM basandolo decodificandolo, sei riuscito a ottenere il DER giusto; tuttavia, si è tentato di utilizzare tale DER come se fosse un DER certificato e non un DER chiave pubblica; questo è ciò che ha causato gli errori.

Questo snippet mostra come hai ottenuto il DER giusto confrontandolo con quello creato con openssl pkey proprio sopra:

$ egrep -v " KEY" pubkey.pem | base64 -d - > pubkey.der.by-b64
$ md5sum *.der*
360f52925de443e7603376664435df46  pubkey.der
360f52925de443e7603376664435df46  pubkey.der.by-b64
$

Potresti anche esaminare openssl pkeyutl , sebbene sia pkey che pkeyutil siano orientati verso chiavi private, ma consentono le operazioni con chiavi pubbliche nude.

    
risposta data 29.09.2018 - 04:29
fonte

Leggi altre domande sui tag