Installazione e aggiornamento di un certificato CA su un client

0

Sto cercando di implementare un sistema in cui un client può scaricare pacchetti di applicazioni da un server per installarli / aggiornarli sul client. Suppongo che il client sia qualcosa come una piattaforma su un sistema embedded. Per l'integrità dei pacchetti applicativi, sto prendendo in considerazione l'utilizzo di una firma digitale.

Ho fatto alcune ricerche e ho scoperto che il client avrebbe dovuto avere un certificato CA e il server avrebbe dovuto firmare un certificato server da una CA e una chiave privata. So che il certificato del server potrebbe essere emesso da una CA se richiesto. Quindi, il server lo memorizzerebbe da qualche parte e lo invierà con i pacchetti dell'applicazione e le firme degli stessi in modo che il client possa verificarli utilizzando un certificato CA.

Le mie domande sono ciò che il client deve fare per installare / aggiornare un certificato CA. Quando abbiamo utilizzato altri tipi di client come browser web e applicazioni di posta, non riconosciamo ciò che tali applicazioni stanno facendo per l'installazione / aggiornamento di un certificato CA. Ma avrei bisogno di implementarlo sul client.

Le mie domande sono

  1. Il client dovrebbe scaricare un certificato CA (root) da un sito Web della CA prima che venga utilizzato?
  2. Oppure un certificato CA (root) deve essere preinstallato sul client?
  3. Oppure il server dovrebbe conservare un certificato CA e comunicare al client dove scaricare il certificato CA?
  4. Che cosa deve fare il client per aggiornare un certificato CA per qualche motivo?

Lo apprezzerei se qualcuno potesse rispondermi.

    
posta 26.12.2014 - 14:10
fonte

2 risposte

0

Risponderò alle domande nell'ordine:

  1. No perché un download non può trasmettere fiducia. Si può avere un download su SSL, ma si farebbe affidamento sulla struttura di trust preesistente utilizzata per SSL. Inoltre dovrai spiegare a un utente cosa dovrebbero fare per stabilire la fiducia e configurare l'applicazione.

  2. Solitamente i certificati radice vengono distribuiti con l'applicazione, sì. Inutile dire che il download deve essere affidabile. Se l'installazione dell'applicazione non può essere considerata attendibile, tutto il trust è comunque fuori dalla finestra.

  3. La catena di certificati (fino al certificato di origine) viene spesso mantenuta con la chiave privata sì. Alla fine il cliente ha bisogno di costruire una catena di fiducia fino a un certificato di cui si fida. Questo potrebbe essere un certificato di origine, ma potrebbe anche essere un certificato CA. Di solito è un certificato di origine perché:

    1. il certificato di root ha un periodo di validità molto più lungo o indefinito;

    2. la chiave radice viene utilizzata solo per creare certificati CA ed è quindi molto più sicura (spesso viene mantenuta offline).

    Con la maggior parte dei protocolli sia il certificato CA che il certificato foglia sono inclusi con la firma. In tal caso, il cliente deve solo conoscere & fidati del certificato radice per convalidare una firma.

  4. Dovrebbe utilizzare un CRL o OCSP per cercare lo stato dei certificati. Se ti fidi di un certificato di root, puoi semplicemente firmare con una nuova chiave / certificato firmato con la chiave principale. Ovviamente se perdi la riservatezza di tutti i certificati attendibili (cioè il certificato / chiave di root), allora devi ristabilire completamente la fiducia in qualche modo.

Tutto ciò che è stato detto in totale è chiamato PKI, potresti voler leggerlo, specialmente per quanto riguarda la gestione delle chiavi.

    
risposta data 27.12.2014 - 16:04
fonte
0

The Official Way

Il certificato è un valido identificativo legale per una persona / azienda / agenzia. Come per qualsiasi documento formale, devi ottenerlo da un'autorità di certificazione ufficiale. Ci sono molti. Come sviluppatore devi ottenere da loro almeno 2 certificati: uno per il tuo server e uno per te come client. Per averli devi fare una requisizione. Quando lo fai, ti verrà concesso il certificato e il file della tua chiave privata per ogni certificato.

Dopo questo processo legale puoi installarlo sul tuo server Apache in questo modo:

  • Prima si installa la catena di certificati nel server. Questi sono alcuni certificati, disponibili pubblicamente dalla CA (autorità di certificazione).
  • Questa catena può essere solo un certificato radice o molti.
  • Se ce ne sono molti li metti tutti insieme in un file. Ci sono altri modi, ma io trovato questo per essere migliore.

Quindi aggiungi queste linee alla configurazione di apache:

SSLEngine on
SSLOptions +StdEnvVars +ExportCertData
SSLCertificateFile      /home/<youruser>/<yourCertFolder>/server.crt #server file
SSLCertificateKeyFile   /home/<youruser>/<yourCertFolder>/server.key #server private key
SSLCertificateChainFile /home/<youruser>/<yourCertFolder>/rootCA.crt #server certificate  chain
SSLCACertificateFile    /home/<youruser>/<yourCertFolder>/rootCA.crt #server CA certicate file (if you're in the test process below, should be the same file above)
SSLVerifyClient require
SSLVerifyDepth  10
  • Vai al tuo browser e importa la catena di certificati della CA che ha emesso i certificati.
  • Importa il tuo certificato personale. Ci sono alcuni tipi di certificato. Se hai acquistato certificati A1 (file), devi semplicemente importarlo nel browser. Se hai acquistato un token A3 (come una chiavetta USB ma per i certificati) devi prima caricare il driver nel browser e poi lo importerà automaticamente quando entri in un sito abilitato SSL.
  • Il certificato che stai utilizzando nel browser deve avere la stessa catena di certificati di quella utilizzata dal server o il server non sarà in grado di convalidarlo.
  • Dopodiché dovresti vedere una finestra che ti chiede di selezionare la tua cerficazione quando entri nel sito.

Molte cose eh? credimi, imparare questo è stato un processo duro.

The Test Way

Ma c'è qualcosa che puoi usare come processo di test. È possibile creare la propria CA ed emettere i propri certificati localmente nel server e nella macchina di sviluppo. Ecco come lo fai:

Prima installazione openssl nel tuo computer se non è già installato. Quindi usa questi script:

Crea certificato CA e server:

#/bin/bash
echo "Create CA private key"
openssl genrsa -des3 -passout pass:123 -out  ./rootCA.key 2048
echo "Remove passphrase"
openssl rsa -passin pass:123 -in ./rootCA.key -out ./rootCA.key
echo "Create CA self-signed certificate"
openssl req -config openssl.cnf -new -x509 -subj '/C=US/L=Dev/O=COMPANY/CN=CA' -days 99999 -key ./rootCA.key -out ./rootCA.crt
echo "Create private key for the server"
openssl genrsa -des3 -passout pass:123 -out ./server.key 2048
echo "Remove passphrase"
openssl rsa -passin pass:123 -in ./server.key -out ./server.key
echo "Create CSR for the server"
openssl req -config ./openssl.cnf -new -subj '/C=US/L=Dev/O=COMPANY/CN=server' -key  ./server.key -out ./server.csr
echo "Create certificate for the server"
openssl ca -batch -config ./openssl.cnf -days 999 -in ./server.csr -out ./server.crt -keyfile ./rootCA.key -cert ./rootCA.crt -policy policy_anything

emissione di certificati:

#!/bin/bash
if [[ -z "$1" || -z "$2" ]]; then
    echo "Use: issueCertificate <NAME>"
    exit
fi
NAME=$1
DN="/C=US/L=Dev/O=COMPANY/CN=$1"
ARQ="${NAME//[[:space:]]/}"
echo -e "\nCreating folder... " 
mkdir $ARQ
echo "done."
echo -e "\nCreating private key... "
openssl genrsa -des3 -passout pass:123 -out ./$ARQ/$ARQ.key 2048
echo "done."
echo -e "\nRemoving password..."
openssl rsa -passin pass:123 -in ./$ARQ/$ARQ.key -out ./$ARQ/$ARQ.key
echo "done."
echo -e "\nCreating CSR... "
openssl req -config ./openssl.cnf -new -subj "$DN" -key ./$ARQ/$ARQ.key -out ./$ARQ/$ARQ.csr
echo "done."
echo -e "\nCreating client certificate"
openssl ca -batch -config ./openssl.cnf -days 999 -in ./$ARQ/$ARQ.csr -out ./$ARQ/$ARQ.crt -keyfile ./rootCA.key -cert ./rootCA.crt -policy policy_anything
echo "done."
echo -e "\nExport client to pkcs12 and import in browser"
openssl pkcs12 -export -passout pass:123 -in ./$ARQ/$ARQ.crt -inkey ./$ARQ/$ARQ.key -    certfile ./rootCA.crt -out ./$ARQ/$ARQ.p12
echo "done."

Quindi immagino sia tutto. Devo tradurre alcune cose e cambiare alcuni nomi e costanti var per rimuovere il nome della mia azienda e l'intero processo è piuttosto complesso. Quindi mi scuso se ho dimenticato qualcosa o qualcosa non funziona. Si prega di informare e correggerò prontamente.

Buona fortuna. :)

    
risposta data 26.12.2014 - 15:14
fonte

Leggi altre domande sui tag