Ho paura che quello che stai chiedendo non ha molto senso.
Se in effetti hai già il set di numeri che compongono la tua chiave privata, tutto ciò che devi fare è esprimerlo come una stringa. E se puoi già farlo, allora per cosa hai bisogno di openssl? E se non puoi farlo, come farai a comunicarli a openssl? In genere se hai effettivamente i dati, allora anche hanno i mezzi per produrli in un formato di file standard.
Il formato della chiave standard utilizzato in x509 è semplicemente ASN.1 dati formattati usando DER (binario) o PEM (base64 ) regole di formattazione. Ecco un'attività divertente per vedere come appare:
$ openssl genrsa > key.pem
Ora abbiamo una coppia di chiavi RSA a 512 bit. Non particolarmente utile, ma piccolo.
$ 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:
....
Quindi questa è la tua chiave privata. I primi due campi; il modulo e publicExponent sono anche la tua chiave pubblica.
Come viene memorizzato? Possiamo ASN.1 decodificarlo senza elaborazione aggiuntiva:
$ 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...
...
Come puoi vedere, il file contiene semplicemente i campi di dati previsti lasciati cadere uno dopo l'altro, senza fluff. Finché hai gli identificatori ASN.1 giusti per ogni campo, hai praticamente finito.
Naturalmente, se non vuoi preoccuparti delle regole di codifica binaria, puoi leggere i campi ASN.1 come testo usando il formato "conf file" descritto in documentazione per ASN1_generate_nconf
. Sembra più questo:
asn1=SEQUENCE:private_key
[private_key]
version=INTEGER:0
n=INTEGER:0xCC959AA2AC036B77...
e=INTEGER:0x010001
d=INTEGER:0x91D1B03E724C9DB4...
Puoi caricare questo formato nel comando asn1parse usando l'opzione -genconf <file>
, ma non sono sicuro che il programma della riga di comando ti consenta di emettere un file PEM o DER dai contenuti. Anche se, realisticamente, un programma C che usa l'API openssl per fare questo sarebbe solo lungo circa 20 righe, quindi è qualcosa che potresti facilmente fare se necessario.
Tuttavia, tutto questo sembra abbastanza ingegnoso; perché dovresti aver bisogno di fare questo è oltre me. Ma immagino che se tu fossi abbastanza esperto in questa tecnologia abbastanza per sapere che hai bisogno di farlo, allora scrivere l'utilità appropriata per farlo sarebbe banale.