Sto provando a generare una coppia di chiavi RSA 1024 (pubblica / privata) usando il seguente comando
openssl genrsa -des3 -out server.key 1024
Nel file server.key, c'è solo il blocco privato RSA, quindi dove va la chiave pubblica?
Il formato della chiave privata RSA include tutti gli elementi pubblici. Quando ottieni la chiave privata hai davvero sia la chiave privata che quella pubblica.
Questo è descritto in PKCS # 1 (il principale standard RSA); il formato della chiave privata è una struttura ASN.1 codificata che contiene:
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
La chiave pubblica consiste in modulo e esponente pubblico , entrambi nella struttura della chiave privata, come mostrato sopra.
Ora la tua domanda potrebbe essere: "Cosa succede se voglio la chiave pubblica 'da sola'?"
OpenSSL vive nel e dal mondo X.509. In X.509 , la chiave pubblica non esiste come valori autonomi; e non esiste un formato file standard per chiavi pubbliche solitarie. Un'applicazione dovrebbe utilizzare le chiavi pubbliche che ha trovato in certificati . Questo è abbastanza evidente nel protocollo SSL / TLS (che è l'obiettivo principale di supporto di OpenSSL): quando il client invia il suo chiave pubblica, lo invia come certificato. Pertanto, se si desidera la chiave pubblica in un file, predisporre la memorizzazione in un certificato (possibilmente autofirmato). Il sottocomando OpenSSL req , con il flag -x509
, può essere di aiuto.
Naturalmente, ogni regola ha delle eccezioni, quindi c'è anche un metodo per ottenere la chiave pubblica "solo" dalla chiave privata; questo è ciò che @ uwotm8 mostra nella sua risposta. Tuttavia, la chiave pubblica risultante, che assomiglierà a questa:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDzYY+BpIuKouSnoemSwHwC25uW
Xc0zX1gl8NtG5UQP2U4Lda0s5XbBJm4O2W+RkOgR1f1d5cGOXRPd6Q9ntw3MYQv6
ubsMRZUaOT4vCpykWfPi/VfsQEPlWHw2pulYAyumx/sw8tX5i9NC2e2bY4eWwo22
BELyXpNdoGozSje8PQIDAQAB
-----END PUBLIC KEY-----
non è realmente utilizzabile da nessuna parte, perché questo è un formato non standard.
(Tecnicamente questo è un elemento SubjectPublicKeyInfo
come appare in un certificato X.509, ma non dovrebbe apparire al di fuori di un certificato X.509.)
La chiave pubblica deve essere derivata dalla chiave privata. Prova questo comando:
openssl rsa -in server.key -pubout
Leggi altre domande sui tag openssl