Извлечь открытый ключ из цифрового сертификата.crt

У меня есть цифровой сертификат (с расширением.crt), такой как:

-----BEGIN CERTIFICATE-----
MIGSAgEBMCgGByqGSM49AQECHQD///////////////////////////////7//+Vt
MAYEAQAEAQUEOQShRVszTfCZ3zD8KKFppGfp5HB1qQ9+ZQ62t6Rcfgif7X+6NEKC
yvvW9+MZ98CwvVniykvbVW1hpQIdAQAAAAAAAAAAAAAAAAAB3OjS7GGEyvCpcXaf
sfcCAQE=
-----END CERTIFICATE-----

У меня вопрос, как я могу извлечь из него простое число открытого ключа, ничего не зная? Я не могу найти какой-либо онлайн-конвертер или структуру, чтобы понять это.

1 ответ

Оказывается, этот файл на самом деле EC PARAMETERS блок для ключа EC, а не сертификат. Я выяснил это, сбросив структуры ASN.1 и сравнив их с другим сгенерированным мной ключом EC.

$  openssl asn1parse -in test.pem -i -dump
    0:d=0  hl=3 l= 146 cons: SEQUENCE
    3:d=1  hl=2 l=   1 prim:  INTEGER           :01
    6:d=1  hl=2 l=  40 cons:  SEQUENCE
    8:d=2  hl=2 l=   7 prim:   OBJECT            :prime-field
   17:d=2  hl=2 l=  29 prim:   INTEGER           :FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D
   48:d=1  hl=2 l=   6 cons:  SEQUENCE
   50:d=2  hl=2 l=   1 prim:   OCTET STRING
      0001 - <SPACES/NULS>
   53:d=2  hl=2 l=   1 prim:   OCTET STRING
      0000 - 05                                                .
   56:d=1  hl=2 l=  57 prim:  OCTET STRING
      0000 - 04 a1 45 5b 33 4d f0 99-df 30 fc 28 a1 69 a4 67   ..E[3M...0.(.i.g
      0010 - e9 e4 70 75 a9 0f 7e 65-0e b6 b7 a4 5c 7e 08 9f   ..pu..~e....\~..
      0020 - ed 7f ba 34 42 82 ca fb-d6 f7 e3 19 f7 c0 b0 bd   ...4B...........
      0030 - 59 e2 ca 4b db 55 6d 61-a5                        Y..K.Uma.
  115:d=1  hl=2 l=  29 prim:  INTEGER           :010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7
  146:d=1  hl=2 l=   1 prim:  INTEGER           :01

Исправление заголовков позволяет читать файл следующим образом:

$  openssl ecparam -in test.pem -text
Field Type: prime-field
Prime:
    00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
    ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:ff:e5:6d
A:    0
B:    5 (0x5)
Generator (uncompressed):
    04:a1:45:5b:33:4d:f0:99:df:30:fc:28:a1:69:a4:
    67:e9:e4:70:75:a9:0f:7e:65:0e:b6:b7:a4:5c:7e:
    08:9f:ed:7f:ba:34:42:82:ca:fb:d6:f7:e3:19:f7:
    c0:b0:bd:59:e2:ca:4b:db:55:6d:61:a5
Order:
    01:00:00:00:00:00:00:00:00:00:00:00:00:00:01:
    dc:e8:d2:ec:61:84:ca:f0:a9:71:76:9f:b1:f7
Cofactor:  1 (0x1)
-----BEGIN EC PARAMETERS-----
MIGSAgEBMCgGByqGSM49AQECHQD///////////////////////////////7//+Vt
MAYEAQAEAQUEOQShRVszTfCZ3zD8KKFppGfp5HB1qQ9+ZQ62t6Rcfgif7X+6NEKC
yvvW9+MZ98CwvVniykvbVW1hpQIdAQAAAAAAAAAAAAAAAAAB3OjS7GGEyvCpcXaf
sfcCAQE=
-----END EC PARAMETERS-----

Который является более красиво отформатированной версией предыдущего вывода. Обратите внимание на правильный BEGIN EC PARAMETERS вместо BEGIN CERTIFICATE заголовок. Основной блок показан на выходе выше.

Другие вопросы по тегам