È sicuro consumare servizi su HTTPS che non è firmato da una CA attendibile?

25

Sto creando un'applicazione client che consumerà un'applicazione di servizi Web fornita da un fornitore di servizi di terze parti. Il servizio è esposto con un URL HTTPS che è non firmato da un'autorità di certificazione attendibile.

È sicuro consumare i propri servizi con la situazione attuale? Tieni presente che la società fornitrice di servizi è nota a noi e abbiamo un accordo commerciale con loro.

    
posta Salman 27.03.2017 - 13:28
fonte

6 risposte

40

Puoi usarlo tranquillamente se aggiungi il loro certificato . Ciò aggiunge complessità alla manutenzione e all'implementazione, ma in realtà migliora la sicurezza.

Se non lo fai, allora dipende da come hanno costruito la loro catena di fiducia: se stanno usando solo certificati autofirmati, allora sei sfortunato e non puoi usare in modo sicuro i loro servizi. Se usano solo una CA privata, puoi comunque importare la CA e fidarti di essa.

Nel complesso, ti consiglierei di implementare il blocco del certificato (o della radice).

Modifica @LieRyan ha fatto un buon commento che mi piacerebbe spendere.

In alcune configurazioni, per bloccare un certificato è necessario aggiungerlo agli elenchi di ancoraggi di root della macchina. Ad esempio, questo è necessario se stai utilizzando IIS su Windows per ospitare la tua applicazione.

Ora, a seconda di come è stato generato il certificato, questo potrebbe essere o non essere un problema. In particolare: se il certificato ha una proprietà di "utilizzo chiave" e se tale proprietà NON elenca "Firma certificato", può essere tranquillamente utilizzato perché non può essere utilizzato per firmare altri certificati (i dettagli sono un po 'più complessi ma quello è il più importante)

Se il certificato NON ha una proprietà "utilizzo chiave" o se tale proprietà ha "firma certificato", allora potrebbe potenzialmente portare ad altri certificati firmati da quel certificato che il sistema operativo considera affidabili. Se hai implementato il blocco dei certificati, non dovrebbe esserci un problema per la tua app (dal momento che il blocco impedisce l'utilizzo di certificati anche altrimenti validi) ma potrebbe essere per un'altra parte del sistema operativo.

    
risposta data 27.03.2017 - 14:27
fonte
26

Is it secure to consume their services with the current situation ?

Questa è una domanda caricata. Fammi scomporre:

Can I communicate with them securely, in a way that cannot be intercepted by any third party?

Sì, puoi. Tuttavia, dovrai eseguire manualmente la cerimonia di scambio delle chiavi e la verifica dell'identità anziché dipendere dalla CA. Ciò può essere fatto ad esempio facendo in modo che rappresentanti di fiducia di ciascuna azienda si incontrino regolarmente per scambiare informazioni identificative e scambiare materiali per la codifica (certificati). La sicurezza della tua connessione dipende dalla sicurezza di questo scambio, quindi devi assicurarti di garantire tale scambio con il giusto livello di sicurezza.

Can I trust this company to not scam me?

Questo è un problema legale. Si noti che anche la CA pubblica in realtà non fa questa affermazione. Tutto ciò che fa una CA pubblica è affermare che una chiave appartiene a un'organizzazione specifica, non affermano la moralità dell'azienda che certificano. Potresti voler assicurarti di avere contratti su quale tipo di servizi ti fornirai e se hai bisogno di pagamenti da saldare e cosa succede se una delle parti contrae unilateralmente un contratto.

Can I trust this company to be competent in managing their security, to avoid undue losses?

Questa è anche una domanda difficile. Volete assicurarvi che il vostro contratto specifichi cosa succede se l'altra parte non è in grado di soddisfare i requisiti di sicurezza e ha causato perdite ad altri. Potresti anche chiedere all'altra azienda di produrre un certificato di audit da un revisore finanziario e / o di sicurezza indipendente.

    
risposta data 27.03.2017 - 15:22
fonte
6

Come sempre, si tratta di te che ti fidi del provider di quel servizio.

In questo caso non è possibile inoltrare su una CA (autorità di certificazione) globalmente nota per garantire la fiducia, che comunque è discutibile.

Dovresti, come sempre, connetterti, controllare l'emittente del certificato (la CA) e se ti fidi di tale CA tramite il tuo negozio locale. Se ti fidi del certificato CA memorizzato localmente questo non è meno sicuro di (o anche più sicuro di) utilizzando una CA di terze parti.

    
risposta data 27.03.2017 - 13:40
fonte
2

Il rischio di utilizzare un certificato autofirmato è per il cliente. I certificati SSL vengono utilizzati dal client per conoscere la chiave pubblica dei server che viene successivamente utilizzata per la crittografia. L'utilizzo di un certificato firmato da una CA attendibile garantisce al client che la chiave appartiene al server previsto.

Quando un client accetta un certificato che non è firmato da una CA attendibile, c'è il rischio che il client parli con un server falso (l'attacco man-in-middle arriva qui). Se il client conferma che il certificato è autentico per una volta, il browser ricorderà il certificato e non mostrerà alcun avviso per la visita successiva.

Si noti che poiché un certificato autofirmato non è "gestito" da una CA, non è possibile una revoca. Se un utente malintenzionato ruba la tua chiave privata, perdi definitivamente, mentre i certificati emessi dalla CA mantengono ancora la rete di sicurezza teorica della revoca (un modo per la CA di dichiarare che un dato certificato è marcio).

Pertanto si consiglia di utilizzare certificati firmati dalla CA attendibile. Se non puoi permetterti di ottenere un certificato dalla CA, è meglio andare su Certificate Pinning come suggerito nella risposta di stephane.

    
risposta data 27.03.2017 - 15:41
fonte
1

La tua domanda può finire in posso fidarmi di un URL HTTPS non firmato da un'autorità di certificazione attendibile?

IMHO, non è esattamente la domanda corretta. Preferirei Che cosa posso garantire di consultare il servizio giusto? La differenza non è semplicemente una formulazione. È in quello che puoi e di cui ti puoi fidare. La risposta alla prima domanda è immediatamente il servizio dovrebbe utilizzare un certificato di una nota CA . La risposta al secondo è Devo conoscere il certificato o il certificato dell'autore del servizio , ma quel certificato può essere autofirmato a condizione che il servizio lo fornisca da un canale alternativo. Quindi dichiari solo quel certificato o qualsiasi certificato autofirmato che lo convaliderà nella configurazione dell'applicazione e ci si può fidare di esso.

    
risposta data 27.03.2017 - 16:25
fonte
0

Non è il consumo del servizio che ti dà sicurezza (autenticità), è invece la consapevolezza di come si verifica il certificato ricevuto dal server che ti assicura l'autenticità.

Il fatto che tu stia chiedendo mostra il livello di sicurezza che hai: utente passivo che vuole salire in sicurezza.

L'uso di una CA nota (dal SO) rende il consumo di un certificato firmato sicuro per qualsiasi utente passivo, perché il sistema fidato può avvisare con informazioni precise per qualsiasi segno di possibile non autenticità (spiegando il "possibile" in condizione ben compresa), o nessun avviso se tutto va bene (o l'intero sistema è compromesso, che è fuori ambito).

Hai detto che stai "costruendo un'applicazione" nonostante l'applicazione stessa possa tecnicamente contenere qualsiasi chiave pubblica per il confronto e comportarsi in modo sicuro (essendo in grado di verificare l'autenticità). Come sviluppatore, sto notando una recente tendenza all'ostacolo nella libreria fornita e nel processo di approvazione delle applicazioni pubbliche, anche più del necessario, CA autofirmato (dove self è ben definito), ad es. questo emerge in link

    
risposta data 27.03.2017 - 15:39
fonte

Leggi altre domande sui tag