(Actualizado con alguna información de fondo)
Para las operaciones RSA, la clave pública consiste en un módulo el producto de dos primos grandes, p y q , que deben ser mantenido como secreto, y un exponente , que normalmente es 65537. No siempre, pero la representación binaria de este último (solo dos de 17 bits) permite operaciones más eficientes, por lo que es muy común. / p>
Dado que la clave consta de dos números, hay varias técnicas disponibles para garantizar que ambas estén disponibles para el procesamiento.
La pregunta original era qué significan estos dos formatos diferentes. Si observa con atención, el módulo citado anteriormente es parte de la cadena hexadecimal "Clave pública", que comienza en el byte número 8. Además, la terminación en binario es 010001, que es 65537 en decimal, por lo que parece que "Clave pública" es de hecho, contiene ambos valores con algunos marcos binarios.
Con los certificados X.509, la mayoría de los datos se codifican con representaciones ASN.1. La representación ASN.1 es un estándar de representación muy versátil (y complejo), comúnmente codificado en dos formatos diferentes: DER o PEM. PEM es muy fácil de reconocer, ya que utiliza un PGP como BEGIN / END framing, y DER es el binario sin formato. PEM es en realidad el DER codificado en Base64, con las líneas BEGIN / END a su alrededor.
Para manipular estos datos, los tres sub-comandos de openssl más útiles son "openssl x509", "openssl asn1parse" y "openssl rsa" (descritos respectivamente en x509 (1), asn1parse (1) y rsa (1 ) páginas de manual).
Como la codificación hexadecimal anterior no parece representar texto, parece mejor mirarlo con la herramienta asn1parse (1), después de convertir a binario. Hice la conversión a mano, para ser utilizada por la herramienta xxd (1), que generalmente se suministra con el paquete vim (1); el comando "xxd -r" se usa para invertir la visualización hexadecimal del mismo comando. Nuevamente, como este ejemplo es bastante corto, simplemente agregué las líneas de prefijo y rompí las líneas en el límite de 16 bytes:
% cat pub.txt
00000000: 3081 8902 8181 00CC CB64 54C2 FAA3 7A81
00000010: 365F 1BD5 1081 75B7 4202 3183 B1D5 5A76
00000020: 726A 77BE 6269 16AB EB39 66B5 2039 33D1
00000030: B401 7D23 4024 9E60 1CA8 3283 EA9D F1F2
00000040: D9F0 1885 9DE1 C0E2 99FF 89A4 F915 BD5D
00000050: BA3F 392E 2614 4880 75EF B5C0 946E 2A62
00000060: D242 342C 4A15 1758 B055 9811 6E91 FD28
00000070: 0D80 C521 C23E FB78 6F38 314A 78F2 812D
00000080: 85C9 B82B F186 C902 0301 0001
Ahora es el momento de convertir a binario y comprobar si realmente es una codificación ASN.1:
% xxd -r <pub.txt >pub.bin
% openssl asn1parse -inform der <pub.bin
0:d=0 hl=3 l= 137 cons: SEQUENCE
3:d=1 hl=3 l= 129 prim: INTEGER :CCCB6454C2FAA37A81365F1BD5108175B742023183B1D55A76726A77BE626916ABEB3966B5203933D1B4017D2340249E601CA83283EA9DF1F2D9F018859DE1C0E299FF89A4F915BD5DBA3F392E2614488075EFB5C0946E2A62D242342C4A151758B05598116E91FD280D80C521C23EFB786F38314A78F2812D85C9B82BF186C9
135:d=1 hl=2 l= 3 prim: INTEGER :010001
De hecho lo es, y podemos ver los dos enteros descritos anteriormente. Solo como ejemplo, podemos convertirlo en PEM, que puede parecer más familiar. Sabemos que es una clave RSA, así que podemos verificar la herramienta rsa (1), y luego de asegurarnos de especificar el formato DER y una (!) De las variantes de clave pública RSA, analiza el binario con éxito:
% openssl rsa -RSAPublicKey_in -inform der <pub.bin
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMy2RUwvqjeoE2XxvVEIF1t0IC
MYOx1Vp2cmp3vmJpFqvrOWa1IDkz0bQBfSNAJJ5gHKgyg+qd8fLZ8BiFneHA4pn/
iaT5Fb1duj85LiYUSIB177XAlG4qYtJCNCxKFRdYsFWYEW6R/SgNgMUhwj77eG84
MUp48oEthcm4K/GGyQIDAQAB
-----END PUBLIC KEY-----
(En realidad, hay otro formato que se mostraría como BEGIN RSA PUBLIC KEY, pero lo anterior es generalmente la forma en que se representa la clave dentro de el certificado).
Todo esto es solo un ejercicio para ver cuáles son realmente los datos proporcionados en la pregunta. La clave pública RSA sin formato solo es teóricamente útil, ya que se maneja durante el protocolo de enlace SSL / TLS, y eso también requiere la mayoría de los datos del certificado. En teoría, puede intentar seguir / depurar el protocolo de enlace, pero generalmente es más complicado: con PFS, ni siquiera es posible, incluso si tiene las claves pública y privada. PFS: el secreto perfecto hacia delante significa que hay una clave efímera aleatoria acordada durante el saludo que solo los dos puntos finales conocen, ni siquiera nosotros que observamos el apretón de manos.
El único propósito útil que he visto que las necesidades en realidad al mirar la clave pública es comparar el módulo de la clave pública con el módulo calculado a partir de la clave privada. Esto es necesario si desea verificar cuál o si la clave privada corresponde a la clave pública en el certificado.
Los comandos para hacer esto son algo diferentes, ya que normalmente tiene la clave como parte de un certificado (en codificación PEM), y la clave privada en el formato RSA en codificación PEM también:
% openssl x509 -noout -modulus -in myserver.crt
% openssl rsa -noout -modulus -in myserver.key
Los dos números deben coincidir si desea usarlos juntos (a veces simplemente calcula el md5 para los resultados anteriores, lo que facilita la comparación).