Posizione migliore per certificato SSL e chiavi private su Ubuntu


62

Su Ubuntu, sembra che il posto migliore per una chiave privata utilizzata per firmare un certificato (per l'uso da parte di nginx) sia in /etc/ssl/private/

Questa risposta aggiunge che il certificato dovrebbe entrare /etc/ssl/certs/ma che sembra un posto non sicuro. I .crtfile devono essere tenuti al sicuro o sono considerati pubblici?


19
Puoi metterti .crtsu un cartellone di Times Square, se vuoi.
Ceejayoz,

Risposte:


48

Il file .crt viene inviato a tutto ciò che si collega; è pubblico. ( chown root:roote chmod 644)

Da aggiungere alla posizione della chiave privata; assicurati di proteggerlo correttamente e di averlo lì dentro. ( chown root:ssl-certe chmod 640)


Mi chiedo perché quella directory non sia g + s per impostazione predefinita.
Collin Anderson,

2
Non ha bisogno di essere; la directory è 0750, quindi non c'è modo per gli utenti non appartenenti al gruppo di attraversare la directory per leggere i file.
Womble

2
Sembra che ssl-cert sia un nome di gruppo non valido su Ubuntu. Forse dovrebbe essere chown root: root invece
Atifm

1
@Atifm Il gruppo di certificati ssl-cert è stato introdotto il 16.04 o il 18.04. Non ricordo quale.
DylanYoung,

1
@DylanYoung: è sicuramente presente su Ubuntu 12.04, e credo che sia stato creato dal pacchetto ssl-cert, utilizzato, forse, tra l'altro, per creare certificati snakeoil autofirmati
MestreLion

35

Non importa dove li metti purché protegga correttamente i tuoi file di chiavi private . Il certificato pubblico è pubblico; nessuna protezione necessaria - privilegi del server o altro.

Per espandere la risposta, non utilizzo la posizione predefinita /etc/ssl.
È più facile per me conservare tutti i miei in un'area separata a causa di backup + altri motivi.

Per Apache SSL, tengo il mio /etc/apache2/ssl/privateo "root area" simile dentro /etc/.

Esempio di installazione

Questo post è orientato verso Ubuntu (Debian) + Apache, ma dovrebbe funzionare sulla maggior parte dei sistemi -
Basta applicare le autorizzazioni e aggiornare la posizione / il percorso in una determinata configurazione (apache / nginx / etc).
Se i file della chiave SSL sono protetti correttamente (directory e file), andrà tutto bene. Nota le note!

Crea directory:

sudo mkdir /etc/apache2/ssl
sudo mkdir /etc/apache2/ssl/private
sudo chmod 755 /etc/apache2/ssl
sudo chmod 710 /etc/apache2/ssl/private

Nota:
chmod 710supporta il ssl-certgruppo sotto Ubuntu.
(Vedi commenti) Anche l'
impostazione dell'autorizzazione su 700on /etc/apache2/ssl/privatefunzionerà correttamente.

Inserisci file SSL:

Inserisci i certificati ssl pubblici www insieme ai certificati intermedi in /etc/apache2/ssl
Inserisci chiavi ssl private/etc/apache2/ssl/private

Imposta proprietario:

sudo chown -R root:root /etc/apache2/ssl/
sudo chown -R root:ssl-cert /etc/apache2/ssl/private/

Nota:
se non si dispone del gruppo ssl-cert , utilizzare 'root: root' nella riga sopra o saltare la seconda riga.

Imposta autorizzazioni:

Certificato / i pubblico / i

sudo chmod 644 /etc/apache2/ssl/*.crt

Chiave / e privata / e

sudo chmod 640 /etc/apache2/ssl/private/*.key

Nota:
l'autorizzazione del gruppo è impostata su READ (640) a causa del gruppo ssl-cert di Ubuntu. Anche '600' va bene.

Abilita il modulo SSL di Apache

sudo a2enmod ssl

Modifica tutti i file del sito Apache e abilita

(vedi ultimo paragrafo) *

sudo nano /etc/apache/sites-available/mysiteexample-ssl.conf
sudo a2ensite mysiteexample-ssl
#             ^^^^^^^^^^^^^^^^^ <-Substitute your ".conf" filename(s)

Riavvia il servizio Apache2

sudo service apache2 restart

o

sudo systemctl restart apache2.service

Fatto. Prova il tuo nuovo sito SSL.

* Ancora una volta questo va oltre la domanda, ma è possibile copiare il file di configurazione del sito Apache SSL predefinito ( sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/mysiteexample-ssl.conf) come un buon punto di partenza / esempio di direttive / directory predefinite normalmente utilizzate in un semplice file 'conf' (Ubuntu / Debian) Apache / SSL . Normalmente indica un certificato SSL autofirmato + chiave (snakeoil), bundle CA e direttive comuni utilizzate per un determinato sito SSL.

Dopo aver copiato, basta modificare il nuovo file .conf e aggiungerlo / rimuoverlo / aggiornarlo secondo necessità con le nuove informazioni / percorsi sopra, quindi eseguirlo sudo a2ensite mysiteexample-sslper abilitarlo.


non so perché suggeriresti di impostare 710 per le autorizzazioni per / etc / apache2 / ssl / private. Impostare il bit di esecuzione per la directory (per il gruppo) senza impostare il bit di lettura per la directory (per il gruppo) non ha molto senso per me. Intendevi impostarlo su 750?
chriv,

@chriv Ho appena impostato le autorizzazioni in base a come lo vedo impostato nell'area SSL predefinita di Ubuntu. Vedi / etc / ssl / certs & / etc / ssl / private & ssl-certs group use. Vedere stackoverflow.com/a/23408897/503621
bshea

1
Una spiegazione molto accurata e dettagliata di una domanda generica con molte possibili risposte. Grazie. Solo per aggiungere un paio di cose, la tua <VirtualHost *:443>sezione sites-available/mysite.confdovrebbe includere i certificati in questo modo:SSLEngine on SSLCertificateFile /etc/apache2/ssl/mysite.crt SSLCertificateKeyFile /etc/apache2/ssl/private/mysite.key
George Dimitriadis,

A proposito: è anche possibile combinare solo le tue configurazioni: 80 e: 443 in un unico file ".conf" di Apache. Devo reindirizzare qualsiasi cosa colpendo la porta: 80 a: 443 / SSL. È anche possibile inserire le impostazioni SSL di base nel file .conf e creare un file di impostazioni SSL "dettagliato" aggiuntivo (ad esempio per impostare le cifre utilizzate / ecc.) E includerlo in tutti i file .conf al di fuori delle aree virtuali. Uso queste impostazioni per "rafforzare" SSL un po 'e lo includo in ogni sito virtuale .conf. Posso ottenere A + presso SSL Labs in questo modo.
bshea,

10

Tutte le risposte qui sembrano OK, ma voglio menzionare una cosa che ho trovato è un problema ... Se devi concatenare il tuo certificato con intermedi o root per trovare un file chain, non inserirlo /etc/ssl/certs, perché quando c_rehashviene eseguito, può creare collegamenti simbolici di hash ai certificati a causa delle radici o degli intermedi al loro interno.

Poi più avanti, se i certificati sono scaduti e li rimuovi e non sai di rieseguirli c_rehash, potresti avere interrotti i collegamenti simbolici hash nella tua /etc/ssl/certsdirectory e cose strane iniziano a succedere quando il tuo computer locale tenta di connettersi SSL e non riesce a trovare le radici su cui convalidare. Ad esempio, con il ricciolo ho iniziato improvvisamente a ottenere:

curl: (60) SSL certificate problem: unable to get issuer certificate

Poco dopo aver ripulito alcuni vecchi file .crt e concatenati .pem in cui mi trovavo /etc/ssl/certs.

Conservare almeno le catene da qualche altra parte evita questo problema. Ho finito per fare una /etc/ssl/local_certstrattenuta per i miei certificati e le mie catene, quindi non erano persi nel caos dei certificati CA che troverai in/etc/ssl/certs


2

Non c'è davvero un posto pericoloso se l'autorizzazione per i singoli file / directory è impostata su qualcosa del genere chown root :0 private.keye in chmod 600 private.keymodo che solo root possa leggerlo. CSR e file di certificati sono meno sensibili come dici tu.

Con queste autorizzazioni, i percorsi menzionati e / usr / local / ssl dovrebbero andare bene.


1
Spesso, le applicazioni che accedono alle chiavi private sono in esecuzione come utenti non root. Suggerirei di mantenere l'accesso per il gruppo ssl-cert.
Shane Madden

1
Capito ma i server web come Apache generano un processo 'parent' di root e assumendo anche nginx questo è pertinente.
Jonathan Ross,

1

Le posizioni sono corrette:

  • /etc/ssl/certs/per il .crtfile
  • /etc/ssl/privateper il .keyfile

Il proprietario deve essere root:rootper entrambi (usare sudo chmod root:root <file>per cambiare se necessario).

Autorizzazioni :

  • 644per il .crtfile
  • 600per il .keyfile

Questo funzionerà per nginx.

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.