openssl - generazione della coppia di chiavi rsa - chiave pubblica

4

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?

    
posta Jake 22.06.2014 - 14:25
fonte

2 risposte

8

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.)

    
risposta data 22.06.2014 - 19:20
fonte
3

La chiave pubblica deve essere derivata dalla chiave privata. Prova questo comando:

openssl rsa -in server.key -pubout
    
risposta data 22.06.2014 - 19:14
fonte

Leggi altre domande sui tag