Devo creare la mia CA per una intranet e sfortunatamente sembra che non ci sia una buona risposta in merito alla sicurezza. SE.
Ci sono molte risorse online su questo argomento, ma tutte sono diverse e alcune utilizzano impostazioni predefinite obsolete (MD5 / SHA1, ecc.) Che non sembrano così affidabili. Esistono anche centinaia di diverse varianti di openssl.cnf
, che vanno da un file di 10 righe a quello enorme fornito di default con la mia distribuzione.
Vorrei una risposta canonica sulla creazione di una semplice CA per lemissione di certificati server e client.
Apparentemente sembra che alcune persone non capiscano ancora che io non sono una grande azienda in cui una compromissione della CA causa miliardi di perdite e non può essere mitigata facilmente, quindi lascia che ti spieghi un po meglio perché ho bisogno della CA:
-
più server collegati tramite collegamenti non sicuri (Internet ) devono comunicare in modo sicuro.
-
Ho bisogno di un modo per identificarmi con quei server al fine di eseguire attività amministrative, senza andare avanti e indietro dal mio gestore di password ogni 10 secondi.
-
nessuna altra CA diversa dalla mia dovrebbe essere in grado di impersonare uno qualsiasi dei server, non importa quanto improbabile ( ma possibile ) .
Ecco. La mia PKI e un certificato installato su ogni macchina sembrano adattarsi perfettamente alle esigenze. Uno dei software che utilizzo richiede anche luso di una PKI, quindi il solo utilizzo di certificati autofirmati non è unopzione.
Per compromettere la PKI qualcuno dovrebbe compromettere la mia macchina da lavoro, e se questo “Fatto questo, lattaccante può già fare un bel po di danni senza nemmeno toccare il PKI (dato che comunque avrei effettuato laccesso tramite SSH al server da questa macchina). Questo è un rischio che accetto di correre e questa PKI non aggiunge alcun rischio maggiore di quello che esiste già.
Commenti
Risposta
Se la tua infrastruttura è tiny , molti dei dettagli sullesecuzione di una CA (ad es. CRL e simili) possono probabilmente essere ignorati. Invece, tutto ciò di cui ti devi veramente preoccupare è firmare i certificati.
Cè una moltitudine di strumenti là fuori che gestiranno questo processo per te. Ne ho persino scritto uno molti anni fa. Ma quello che consiglio se vuoi qualcosa di veramente semplice è easy-rsa del progetto OpenVPN. È un involucro molto sottile attorno allo strumento della riga di comando OpenSSL. Se gestirai MOLTI certificati e ti occuperai effettivamente della revoca e cose del genere, vorrai unutilità molto più complessa e completa di funzionalità. Ci sono più che sufficienti suggerimenti già forniti, quindi mi limiterò alle basi di ciò che stai cercando di realizzare.
Ma ecco la procedura di base. La spiegherò con OpenSSL , ma va bene qualsiasi sistema.
Inizia creando la tua CA “root”: sarà un certificato autofirmato. Ci sono diversi modi per farlo; questo è uno. Faremo il nostro è un certificato di 10 anni con una chiave a 2048 bit.Modifica i numeri come appropriato. Hai detto che eri preoccupato per lalgoritmo di hashing, quindi ho aggiunto -sha256
per assicurarmi che sia firmato con qualcosa di accettabile. Sto crittografando la chiave utilizzando AES-256, ma è facoltativo Ti verrà chiesto di compilare il nome del certificato e simili; questi dettagli non sono particolarmente importanti per una CA root.
# First create the key (use 4096-bits if that"s what floats your boat) openssl genrsa -aes256 -out root.key 2048 # Then use that key to generate a self-signed cert openssl req -new -x509 -key root.key -out root.cer -days 3652 -sha256
Se hai crittografato la chiave nel primo passaggio, dovrai fornire la password a usalo nel secondo. Controlla il certificato generato per assicurarti che sotto “Vincoli di base” sia visualizzato “CA: TRUE”. Questo è davvero lunico aspetto importante di cui ti devi preoccupare:
openssl x509 -text < root.cer
Fantastico. OK, ora firmiamo un certificato. Avremo bisogno di unaltra chiave e questa volta una richiesta. Ti verrà chiesto di nuovo il tuo nome e indirizzo. Quali campi compilare e cosa fornire dipende da te e dalla tua applicazione, ma il campo che conta di più è il “Nome comune”. È lì che fornisci il tuo nome host o nome di accesso o qualsiasi altra cosa attesterà questo certificato.
# Create new key openssl genrsa -aes256 -out client1.key 2048 # Use that key to generate a request openssl req -new -key client1.key -out client1.req # Sign that request to generate a new cert openssl x509 -req -in client1.req -out client1.cer -CA root.cer -CAkey root.key -sha256 -CAcreateserial
Nota che questo crea un file chiamato root.srl per mantieni i nostri numeri di serie diretti. Il flag -CAcreateserial
indica a openssl di creare questo file, quindi lo fornisci per la prima richiesta che firmi e poi mai più. E ancora una volta, puoi vedere dove per aggiungere largomento -sha256
.
Questo approccio – fare tutto manualmente – a mio parere non è la migliore idea. Se stai eseguendo unoperazione considerevole , allora probabilmente vorrai uno strumento in grado di tenere traccia di tutti i tuoi certificati per te.
Invece, il mio punto qui era di mostrarti che loutput che desideri – i certificati firmati nel modo desiderato loro – non dipende dagli strumenti che usi, ma piuttosto dalle opzioni che fornisci a quegli strumenti. La maggior parte degli strumenti può produrre unampia varietà di configurazioni, sia forti che deboli, e spetta a te fornire i numeri che preferisci m appropriato. I valori predefiniti obsoleti sono la norma per il corso.
Commenti
- È ‘ importante notare che quando firmi un certificato client, è solo la parte pubblica . Nessuna chiave privata deve essere trasmessa o generata dalla CA.
- Potresti espandere la tua risposta sulla creazione di un certificato CA intermedio? Grazie.
- @Andr é I certificati intermedi sono solo certificati normali con
basicConstraints = CA:TRUE
impostato nei loro attributi estesi. Niente di magico, solo un altro certificato. - @tylerl Amico, sei fantastico.
- Questa risposta è FANTASTICA ed è stata di grande aiuto, ma ho un aggiornamento del 2017 da aggiungere. Chrome e altri ora richiedono lestensione x509v3
subjectAlternativeName
; altrimenti, considerano il certificato non valido, anche con un certificato radice CA correttamente installato nel sistema. Ho lottato per un po di tempo per trovare la soluzione giusta. Questa pagina è stata preziosa per me e ha risolto lultimo pezzo del puzzle: cmrg.fifthhorseman.net/wiki/SubjectAltName . IMO, laggiunta della SAN durante la firma, al contrario di quando si richiede, è sia più semplice che più simile a ciò che fanno effettivamente le CA pubbliche.
Risposta
Se desideri veramente essere una CA, presta attenzione alle implicazioni sulla sicurezza di farlo.
- La chiave privata utilizzata per generare la CA radice per la tua intranet dovrebbe letteralmente essere rinchiuso in una cassaforte. E laccesso a tale cassaforte dovrebbe essere monitorato fisicamente.
- Lutilizzo di una CA radice autofirmata costringe i tuoi utenti non solo a fidarsi che stai eseguendo la due diligence con la protezione sicura delle chiavi, ma anche a inserire una radice inizialmente non attendibile possono nella loro catena di certificati.
- Ciò interrompe anche la funzionalità di pinzatura OSCP per quanto riguarda la verifica esterna della catena di certificati, motivo per cui esistono i servizi di gestione delle identità in primo luogo.
Molti sostengono il ragionamento alla base della gestione della propria CA come; è per una intranet aziendale in cui parte delle nostre build di desktop include la root ca oppure è per un numero limitato di utenti.
Anche se non è necessariamente sbagliato farlo e può offrire alcuni vantaggi, lo fa annulla la catena di verifica per la quale è stata creata la gestione delle identità basata su certificati.
Se decidi di implementare la tua CA root, assicurati di seguire le stesse pratiche di sicurezza utilizzate da qualsiasi altra CA root. Come azienda Lultima cosa che vorresti che accadesse è che qualcuno comprometta la chiave privata utilizzata per la tua CA root e inizi a firmare certificati per campagne di phishing contro i tuoi clienti.
Ci sono tonnellate di guide di best practice disponibili per questo, NIST ( istituto nazionale per gli standard e la tecnologia) è un gruppo collaborativo che assiste in vari standard per argomenti di sicurezza informatica.
Letture consigliate:
Auditing (PDF)
Disaster Recovery (PDF)
Public Key Systems (PDF)
Sans Institute per quanto riguarda distribuzioni PKI più piccole
Ok, vedo che hai aggiornato la tua domanda per essere più specifica.
Due documenti per configurare il tuo file openssl.cnf per specifiche CA:
https://www.openssl.org/docs/apps/ca.html
https://www.openssl.org/docs/apps/config.html
Mi rendo conto che questa potrebbe non essere la risposta che desideri, ma poiché lambiente e i requisiti di ognuno sono diversi definire un ambito per limplementazione della CA per una buona configurazione di esempio.
Commenti
- Là ‘ Non cè motivo per cui la tua CA non possa ‘ fare OCSP. Anche la riga di comando OpenSSL può farlo, e questo ‘ s sulla barra più bassa possibile.
- I link openssl ora sono 404
Answer
Lì non è un modo per farlo semplicemente. ci sono alcuni strumenti che possono aiutarti a iniziare facilmente.
come:
nessuno di loro è un PKI completo a parte forse EJBCA, ma non è banale da configurare.
- XCA è un piccolo strumento di frontend per ottenere uninterfaccia grafica per generare, firmare e revocare i certificati.
- EJBCA o Enterprise Java Beans Certificate Authority è una JBOSS / Jetty Webapp che può eseguire lintera infrastruttura PKI per unazienda.
- openssl è lo strumento da riga di comando di base. può eseguire tutti i bit offline di una CA ma nessuna verifica (pronta alluso). con esso puoi creare i tuoi OCSP Verifiers ma devi creare tu stesso il codice “online”.
Se tutto ciò che cerchi è corretto, openssl config. XCA può aiutarti a generarli. (ha una funzione di esportazione della configurazione openssl
Commenti
- EJBCA ora ha unimmagine VM che puoi utilizzare. Altrimenti ” non banale da configurare ” può essere considerato un eufemismo. È fondamentalmente un enorme
ant
script che cerca di configurare il ( JBoss) server delle applicazioni che può (e nel mio caso si ) interrompersi. - limmagine della VM ha scopi di valutazione, quindi non la consiglierei per un server di produzione.
- Potrei esaminare XCA. EJBCA non è decisamente ‘ t unopzione: uninterfaccia web aggiunge una superficie di attacco non necessaria ed è più difficile da configurare. Preferisco decisamente usare solo openssl però.
- @Andr é per quanto riguarda EJBCA, può essere utilizzato anche dalla riga di comando, quindi hai vinto ‘ non deve esporre linterfaccia web. Ma ‘ è una cosa a livello aziendale e probabilmente eccessiva per i tuoi scopi es (e lo dico come qualcuno che si guadagna da vivere lavorando con esso).
Rispondi
Per alcuni buon background, guarda la mia presentazione Come costruire e far funzionare il tuo Centro di mediocrità per la gestione dei certificati . Il succo della presentazione è che la cosa più richiesta non è “un elenco dei comandi da eseguire, ma piuttosto una profonda comprensione di tutti i vari controlli che entrano in funzione nel funzionamento di una CA commerciale, come interagiscono insieme, limpatto esatto della rimozione di qualsiasi uno di questi, limpatto cumulativo della rimozione di diversi di essi e i controlli attenuanti necessari per compensare la riduzione della sicurezza.
Questo è il motivo per cui non esiste una “risposta canonica sulla creazione di una semplice CA”. segui lintero percorso ISO, iniziando con una festa per la firma delle chiavi, certificati di root duplicati con air gap e vault, più firmatari intermedi, server di revoca, ecc., ecc., Oppure devi escogitare un compromesso basato sul costo / beneficio e rischio unici profilo che lazienda è disposta ad accettare. Chiunque abbia capacità ed esperienza sufficienti per effettuare tale valutazione, per definizione, non ha bisogno del cheat sheet. Possono analizzare la sintassi del comando corretta sulla base di una profonda comprensione della funzione aziendale da svolgere e delle primitive di sicurezza utilizzate per implementare tale requisito.
Nella presentazione ci sono storie di impegni reali di negozi che hanno seguito questa strada e hanno sbagliato orribilmente. In alcuni casi la mia valutazione ha riportato che assolutamente nulla che posso fare con la sicurezza del middleware può superare i punti deboli intrinseci della CA interna. Chiunque negli Stati Uniti dovrebbe rendersi conto che probabilmente acquista servizi da almeno uno dei fornitori a cui si riferisce la presentazione. Queste sono banche, unioni di credito, assicurazioni sanitarie, rivenditori e altro ancora.
Poiché, affinché le raccomandazioni siano “corrette”, è necessario che chi ha risposto formuli ipotesi importanti sui tuoi profili di rischio accettabili e che tu faccia ipotesi importanti sul grado in cui le tue idee di rischio e quelle loro sono allineate e in sincronia, la proposta stessa è rischiosa in apparenza. Nella maggior parte di questi casi, la valutazione dellidoneità dei tutorial forniti ha più a che fare con la presentazione che con leffettivo livello di sicurezza derivante dal seguire le loro procedure. Se è ben organizzato e chiaramente articolato, ciò conta MOLTO più che se sia efficace. Scegliamo il cheat sheet canonico che ci sembra migliore.
Per questi motivi non credo che un esperto credibile fornirebbe ” file”, ma nella migliore delle ipotesi potrebbe fornire un processo di valutazione per valutare i requisiti e il rischio accettabile in modo più completo. Dal momento che stai scommettendo sul risultato, nessun esperto credibile lo farebbe al di fuori della protezione di un contratto. Qualsiasi consiglio che ricevi dovrebbe, quasi per definizione, provenire da un esperto in credibile. Buona fortuna.
Commenti
- Anche per una intranet per risorse interne? Potresti anche voler indicare che la presentazione è tua.
- ” Anche per un intranet per le risorse interne? ” Soprattutto per la intranet poiché ‘ s dove si verificano la maggior parte delle violazioni dei dati. ” Potresti anche indicare che la presentazione è tua. ” Pensavo di avere descrivendo la mia esperienza facendo le valutazioni, ma è stato considerato. Lho ‘ aggiornato.
Risposta
Segui questi istruzioni per configurare una CA basata su Windows . Dato che stai emettendo certificati client, tieni presente che gli hash SHA2 non sono supportati su XP.
La risposta semplice è:
- Installa AD
- Installa una CA aziendale sul controller di dominio
- Modifica il modello di certificato per emettere i certificati per gli utenti finali (imposta lautorizzazione per gli utenti a registrarsi automaticamente o ad accedere a una pagina web)
- Distribuisci la chiave pubblica del certificato radice a tutti i server che convalidano gli utenti
- Se gli utenti sono su AD, utilizza GPO per abilitare la registrazione automatica
echo "Abandon all hope, ye who enter here."
isCA=No
e una lunghezza del percorso pari a zero. ” Purtroppo, i criteri su cui si basa la maggior parte della fiducia nel sistema, come la revoca, ligiene dello spazio dei nomi e la sicurezza della radice, non sono ‘ t risolti inopenssl.cnf
.