È possibile limitare l'uso di un certificato radice a un dominio


28

Il mio cliente utilizza un certificato autofirmato per far funzionare un'applicazione. Per poter funzionare, devo installare il certificato radice che hanno usato per firmare il certificato.

È possibile configurare un certificato radice in modo che sia valido solo per un dominio?


Potrei essere solo io, ma non sono chiaro cosa tu stia effettivamente chiedendo. Quale stato finale stai cercando di realizzare? Se importi il ​​loro certificato di root nella fiducia dei controller di dominio, solo i sistemi sotto quel dominio sarebbero in grado di convalidare contro di esso ...
Gravy

Sembra che tu stia confondendo i certificati autofirmati con l'utilizzo di una CA radice non attendibile pubblicamente. Un'applicazione configurata per utilizzare un certificato autofirmato è molto male, poiché l'applicazione dovrebbe essere configurata per ignorare gli errori di convalida del certificato. L'utilizzo di una CA principale non attendibile pubblicamente è in realtà abbastanza comune.
Greg Askew,

hai un server CA interno?
Crypt32,

1
Una CA può limitarsi a determinati domini con vincoli di nome , ma applicare i vincoli retroattivamente alla CA di qualcun altro è una questione diversa.
Matt Nordhoff,

3
non c'è differenza. È possibile applicare vincoli di nome anche a una CA di terze parti. È sufficiente firmare il certificato della CA principale di terze parti utilizzando la propria CA privata e pubblicare certificati incrociati generati. In questo caso, la catena estera finirà nella tua catena privata attraverso un certificato incrociato limitato.
Crypt32,

Risposte:


24

Come regola generale:

No , implicito nella fiducia del certificato CA del cliente è la fiducia in ogni certificato firmato da quella CA.

Non conosco alcuna applicazione / libreria che abbia un'opzione semplice che consente all'utente finale di selezionare la fiducia dei propri clienti o di qualsiasi altro certificato CA solo per determinati (sotto) domini, vale a dire solo per *. esempio.com e * .example.org e nient'altro.

Mozilla ha una preoccupazione simile per le CA sponsorizzate dal governo attualmente fidate come punto di attenzione aperto e ad esempio Chrome ha controlli extra integrati per l'accesso ai siti di Google, ed è così che il certificato canaglia * .google.com e il compromesso della CA Diginotar sono diventati pubblici .

Ma anche se non ti fidi della CA, puoi comunque importare / fidarti di un certificato server specifico firmato da quella CA, che impedirà gli avvisi SSL per i nomi host in quel certificato. Ciò dovrebbe far funzionare l'applicazione senza errori o reclami.

eccezioni:

Un'opzione molto sottoutilizzata dello standard PKI X.509v3 è l' estensione Nome Vincoli , che consente a un certificato CA di contenere liste bianche e nere di modelli di nomi di dominio per i quali è autorizzato a rilasciare certificati.

Potresti essere fortunato e il tuo cliente si è limitato a configurare la propria infrastruttura PKI e ha incluso quel vincolo Nome nel proprio certificato CA. Quindi è possibile importare direttamente il loro certificato CA e sapere che può convalidare solo un intervallo limitato di nomi di dominio.


2
@CryptoGuy: un'autorità di certificazione interna può anche emettere certificati per domini esterni. Una volta che ti fidi della tua CA interna, non ci sono restrizioni tali che solo i certificati per il tuo dominio (Active Directory o DNS) example.como *.ad.example.com siano validi. La tua CA interna può anche emettere certificati per *.example.bankconsentire un buon attacco man-in-the-middle e ficcare le tue credenziali bancarie online.
HBruijn,

1
Bene, "tutto" non è perfettamente accurato. Ci sono cose come gli elenchi di revoca dei certificati. Ma ciò non cambia la linea di fondo.
Ben Voigt,

1
scusa, hai sbagliato di nuovo. È possibile limitare l'autorità di certificazione di terze parti a fidarsi dei certificati (da tale autorità di certificazione) rilasciati a un elenco di nomi desiderato. Per quanto riguarda la tua CA interna, presumo indubbiamente la fiducia. Se non ti fidi della tua stessa CA, allora qualcosa non va nel tuo IT. Voglio dire che, avendo una CA privata, OP può stabilire un trust parziale con una CA di terze parti (limitando i nomi di cui si fidano).
Crypt32,

3
Al tuo post modificato: anche se la CA di terze parti non ha l'estensione dei Vincoli di nome, è possibile applicarli utilizzando il proprio server CA interno tramite certificazione incrociata. In questo caso, la catena di certificati sarà la seguente: foglia certificato SSL -> certificato incrociato -> il certificato CA -> il certificato radice interno. Il trucco è che firmi una CA di terze parti usando la tua CA interna. E il certificato incrociato avrà tutti i vincoli richiesti.
Crypt32,

1
CryptoGuy afferma che ciò è possibile, ma trovare i dettagli di implementazione è impegnativo. Che ne dici di una risposta che descriva come questo può essere realizzato? E forse una discussione su quali piattaforme supportano i Vincoli dei nomi.
Jorfus,

17

@CryptoGuy ha avuto una risposta abbastanza buona qui, ma volevo ampliarla.

Per parafrasare:

È possibile limitare l'autorità di certificazione di terze parti a fidarsi dei certificati (da tale autorità di certificazione) rilasciati a un elenco di nomi desiderato. Anche se la CA di terze parti non ha l'estensione dei vincoli di nome, è possibile applicarli utilizzando il proprio server CA interno tramite certificazione incrociata. Il trucco è che firmi una CA di terze parti usando la tua CA interna.

certificato SSL foglia -> certificato incrociato -> il certificato CA -> il certificato radice interno.

Ed ecco come farlo funzionare (usando la CA della riga di comando OpenSSL)

Crea una CA semplice

openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"

È possibile saltare la creazione di una CA intermedia

Creare una richiesta CA intermedia, con vincoli di nome.

openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg

Con questo nel ossl_domain_com.cfgfile:

[ req ]
prompt=no
distinguished_name=req_distinguished_name
req_extensions=domain_ca

[ req_distinguished_name ]
CN=somedomain.com trust CA

[ domain_ca ]
basicConstraints=critical,CA:true,pathlen:1
nameConstraints=critical,permitted;DNS:.somedomain.com

Quindi, firmare quella CA del dominio intermedio con la propria CA.

openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg

Se hai saltato la creazione dell'intermedio, usa la tua CA principale per firmare

Ora firma nuovamente l'autorità di certificazione del dominio originale sotto la tua autorità, utilizzando il loro certificato. È possibile aggiungere le estensioni CA qui.

openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt

Potrebbe essere necessario utilizzare l' -x509-to-reqargomento per creare una richiesta, che firmeresti esattamente allo stesso modo dell'intermedio sopra.

Ora aggiungi la tua CA principale, la CA intermedia e il dominio incrociato al database di fiducia del tuo browser.


2
MacOS non supporta i vincoli nome. Basta FIY per chiunque lavori su un nome con vincolo CA interno. security.stackexchange.com/questions/95600/… archive.is/6Clgb
jorfus

D: qual è lo stato di questa soluzione? In quali sistemi funziona oggi (2018)? // L'ho voluto ogni volta che sono costretto a installare un altro certificato autofirmato; e ogni volta che penso all'ufficio postale di Hong Kong o a Symantec. // Penso che non mi potrebbe interessare che nessuno attui il restringimento così descritto, purché non attui accidentalmente un allargamento.
Krazy Glew,

@KrazyGlew Ho un file batch che uso per questo, e lo uso ancora regolarmente. Occasionalmente devo riemettere i certificati intermedi mentre scadono o ruotano, quindi è un po 'più manuale, ma non è stato un problema. Di tanto in tanto mi imbatto in siti gestiti dalle autorità di cui il mio browser non si fida a causa dell'utilizzo di un'altra Autorità intermedia o di un nome di dominio aggiuntivo che hanno aggiunto, di cui il mio non si fida.
davenpcj,

2
L'ho usato con successo, grazie. Funziona alla grande senza il certificato intermedio, c'è qualche vantaggio nell'usarne uno? Inoltre, la basicConstraintsriga nel file di configurazione sembra causare l'estensione dei vincoli da includere nel certificato due volte, il che fa sì che Firefox rifiuti il ​​certificato con un messaggio di errore criptico. Penso che possa essere rimosso in modo sicuro.
wrtlprnft,

Ottengo un errore in ultimo passo: error with certificate to be certified - should be self signed. Cosa significa e come risolverlo? pastebin.ubuntu.com/p/QHhpQh2N6J
mymedia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.