Come si produce una chiave pubblica con firma CA?

6

Ho bisogno che qualcun altro cripta i dati segreti con la mia chiave pubblica che posso poi decifrare con la mia chiave privata. Ho prodotto una coppia di chiavi pubbliche / private RSA con OpenSSL che ha dato loro la chiave pubblica e ha tutto a posto.

Più di recente, qualcuno ha sottolineato che siamo soggetti a un possibile attacco man-in-the-middle in cui i cattivi accettano la mia chiave pubblica e passano la loro chiave pubblica dall'altra parte. L'altra parte avrebbe quindi crittografato doverosamente i dati segreti, passarli al MITM che li avrebbe decrittografati, ricodificati con la mia chiave pubblica prima di trasmetterli a me senza che io ne fossi il più saggio. La soluzione consigliata è di avere la mia chiave pubblica firmata da una CA che l'altra parte si fida prima di passarla sopra.

Come esperimento, ho prodotto un CSR che ero in grado di firmare con la mia CA, ma il certificato risultante contiene anche la chiave privata (crittografata). Preferirei non passare la mia chiave segreta a nessun altro, crittografato o meno.

C'è un modo per far firmare la mia chiave pubblica?

    
posta user1683793 18.12.2015 - 19:47
fonte

2 risposte

4

La firma di una chiave pubblica è effettivamente un certificato. Questi sono i passi che faccio per produrre un certificato di chiave pubblica che posso distribuire ad altri in modo che possano comunicare in modo sicuro con me:

Configurazione

  1. Genera le chiavi private:

    openssl genrsa -out private.pem 2048

  2. Genera le chiavi pubbliche:

    openssl rsa -in private.pem -outform PEM -pubout -out public.pem

  3. Crea una CSR (Certificate Signing Request)

    openssl req -new -key private.pem -out certificate.csr

  4. Crea un certificato autofirmato (puoi condividere questo certificato)

    openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt

Encrypting

openssl rsautl -encrypt -inkey private.pem -keyform PEM -in data > encrypted_data

decrittografia

  1. Estrai la chiave pubblica dai certificati

    openssl x509 -pubkey -noout -in certificate.crt > certpubkey.pem

  2. Decifra i dati

    openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -in encrypted_data > data

Se intendi far firmare la tua chiave da una CA, dovrai inviare il tuo file CSR (e alcuni contanti) alla CA di tua scelta, ti daranno il certificato che puoi utilizzare al posto dell'auto- certificato cert che ho citato nei passaggi precedenti.

    
risposta data 18.12.2015 - 20:26
fonte
0

Estrai la chiave privata crittografata dalla copia del certificato CA che hai creato (assegnandolo ad altri). Non è necessario che la chiave privata sia presente a meno che non la si utilizzi per firmare un certificato contenente un'altra chiave pubblica.

Quando invii la tua chiave pubblica, invia invece un intero certificato (ad eccezione della chiave privata), firmata utilizzando la chiave privata CA associata. Al fine di verificare la validità della chiave pubblica al suo interno, è necessario controllare l'hash del certificato con l'hash crittografato (che è stato crittografato utilizzando la chiave privata della CA). Questo viene decodificato utilizzando la chiave pubblica della CA. Se la decrittografia ha esito positivo e l'hash corrisponde all'hash del certificato, le informazioni all'interno del certificato possono essere considerate attendibili.

C'è anche altro oltre alla semplice crittografia, ad esempio un attacco di replay in cui un utente malintenzionato invia dati crittografati precedentemente salvati. TLS copre molto più di quanto la persona media possa pensare, e l'implementazione di un sistema simile non è assolutamente raccomandata. Utilizza TLS quando possibile per tutto ciò che vuoi essere privato.

    
risposta data 18.12.2015 - 20:30
fonte