Come implementare correttamente la connessione criptata tra due parti che si fidano l'una dell'altra con SSL?

0

Mi piacerebbe avere una connessione affidabile (come in TCP) crittografata (autenticità, integrità, riservatezza) tra il programma A e il programma B. Io sono il creatore di entrambi A e B. Voglio A per comunicare solo con B e viceversa. A e B non hanno intenzioni malevole l'una contro l'altra, quindi se A dice a B che è A, B può fidarsi.

Ora ci sono diversi modi per farlo, inclusi, ma non limitati a:

  1. A e B hanno lo stesso certificato autofirmato
  2. A e B hanno ciascuno il proprio certificato che è:
    1. self-signed; in questo caso A aggiunge il certificato di B al suo elenco di autorità di certificazione e viceversa
    2. firmato dall'altra parte; Credo che ogni parte si fida di sé.
    3. firmato da me, un'autorità di certificazione con un solo operatore, utilizzando la mia chiave privata.

...

Quale approccio è il migliore e perché?

Sono abbastanza nuovo per la crittografia in generale e trovo questo molto confuso. Sono sicuro che questo è un problema che si presenta frequentemente in molte applicazioni, quindi sono sicuro che ogni approccio ha i suoi pro e contro e che probabilmente non ho nemmeno elencato l'approccio migliore. So che la sicurezza delle informazioni è un campo minato quindi qualsiasi consiglio è il benvenuto.

    
posta Martin Drozdik 14.01.2017 - 00:29
fonte

1 risposta

2

Confrontiamo gli approcci a cui stai pensando:

  1. A and B have the same self signed certificate.
  • Se una delle parti ottiene questo certificato, può farlo facilmente masquerade come uno dei due.

  • In futuro se vuoi aggiungere nuove parti comunicanti, lo avrai trovare un nuovo modo per identificare e autenticare i singoli server come tutti avranno lo stesso certificato.

La seconda idea è migliore della precedente, ma la scalabilità dipende dal tipo di implementazione che si utilizza.

  1. A and B have each their own certificate which is:
    self-signed; in this case A adds B's certificate to its list of certificate authorities and vice versa
  • Sarà un grosso problema mantenerlo in futuro. Ogni volta che aggiungi un nuovo server, dovrai aggiungere il suo certificato a tutti i server con i quali vuoi comunicare. Se hai intenzione di distribuire questi server separatamente, non sarà un'esperienza piacevole per i tuoi clienti.

signed by the other party; I believe that each party trusts itself.

  • Ancora una volta ti imbatterai in problemi di scalabilità. L'aggiunta di nuovi server richiederà sempre che i server esistenti generino nuovi certificati.

signed by me, a one-man certificate authority, using my private key.

  • Secondo me questa è la soluzione migliore. Sarai in grado di raggiungere il tuo scopo iniziale di avere una comunicazione sicura e sarà facile anche scalare. Ogni nuovo server avrà un certificato generato dall'autorità di certificazione che è attendibile dai server esistenti.

Se sei preoccupato per i certificati autofirmati v / s CA in termini di sicurezza, puoi leggere questa risposta

    
risposta data 14.01.2017 - 02:09
fonte

Leggi altre domande sui tag