Me temo que lo que estás preguntando no tiene mucho sentido.
Si de hecho ya tiene el conjunto de números que componen su clave privada, todo lo que necesita hacer es expresar eso como una cadena. Y si ya puede hacer eso, ¿para qué necesita openssl? Y si no puedes hacer eso, entonces, ¿cómo los vas a comunicar a openssl? Por lo general, si realmente tiene los datos, también tiene los medios para generarlos en un formato de archivo estándar.
El formato de clave estándar utilizado en x509 es simplemente ASN.1 datos formateados usando DER (binario) o PEM (base64 ) reglas de formateo. Aquí hay una actividad divertida para ver cómo se ve:
$ openssl genrsa > key.pem
Ahora tenemos un par de claves RSA de 512 bits. No es particularmente útil, pero pequeño.
$ openssl rsa -text < key.pem
Private-Key: (512 bit)
modulus:
00:cc:95:9a:a2:ac:03:6b:77:11:52:be:06:86:8e:
....
publicExponent: 65537 (0x10001)
privateExponent:
00:91:d1:b0:3e:72:4c:9d:b4:68:6c:89:75:2d:43:
....
Así que esa es tu clave privada. Los dos primeros campos; el módulo y publicExponent también son su clave pública.
¿Cómo se almacena esto? Podemos ASN.1 descodificarlo sin procesamiento adicional:
$ openssl asn1parse < key.pem
0:d=0 hl=4 l= 316 cons: SEQUENCE
4:d=1 hl=2 l= 1 prim: INTEGER :00
7:d=1 hl=2 l= 65 prim: INTEGER :CC959AA2AC036B77...
74:d=1 hl=2 l= 3 prim: INTEGER :010001
79:d=1 hl=2 l= 65 prim: INTEGER :91D1B03E724C9DB4...
146:d=1 hl=2 l= 33 prim: INTEGER :E831F72E74263DDC...
...
Como puede ver, el archivo simplemente contiene los campos de datos esperados que se colocaron uno tras otro, sin pelusa. Siempre y cuando tengas los identificadores ASN.1 correctos para cada campo, estarás listo.
Por supuesto, si no quiere molestarse con las reglas de codificación binarias, puede leer los campos ASN.1 como texto usando el formato "conf archivo" descrito en documentation para ASN1_generate_nconf
. Se parece más a esto:
asn1=SEQUENCE:private_key
[private_key]
version=INTEGER:0
n=INTEGER:0xCC959AA2AC036B77...
e=INTEGER:0x010001
d=INTEGER:0x91D1B03E724C9DB4...
Puede cargar este formato en el comando asn1parse utilizando la opción -genconf <file>
, pero no estoy seguro de que el programa de línea de comandos le permita generar un archivo PEM o DER desde el contenido. Aunque, de manera realista, un programa en C que utiliza la API de openssl para hacer eso solo tendría unas 20 líneas, por lo que es algo que podría hacer fácilmente si fuera necesario.
Sin embargo, todo esto suena bastante artificial; ¿Por qué posiblemente necesitarías hacer esto está más allá de mí? Pero me imagino que si tuvieras la suficiente experiencia en esta tecnología para saber que tenías la necesidad de hacerlo, entonces escribir la utilidad adecuada para hacerlo sería trivial.