Meilleur emplacement pour le certificat SSL et les clés privées sur Ubuntu

62

Sur Ubuntu, il semble que le meilleur endroit pour une clé privée utilisée pour signer un certificat (à utiliser par nginx) est dans /etc/ssl/private/

Cette réponse ajoute que le certificat devrait entrer /etc/ssl/certs/mais cela semble être un endroit dangereux. Les .crtfichiers doivent-ils être gardés en sécurité ou sont-ils considérés comme publics?

Adam Nelson
la source
19
Vous pouvez mettre votre .crtplace sur un panneau d'affichage Times Square, si vous le souhaitez.
ceejayoz

Réponses:

48

Le fichier .crt est envoyé à tout ce qui se connecte; c'est public. ( chown root:rootet chmod 644)

Pour ajouter à l'emplacement de la clé privée; assurez-vous de bien le sécuriser et de l'avoir à l'intérieur. ( chown root:ssl-certet chmod 640)

Shane Madden
la source
Je me demande pourquoi ce répertoire n'est pas g + s par défaut.
Collin Anderson
2
Cela n'a pas besoin d'être; le répertoire est 0750, il est donc impossible pour les utilisateurs qui ne font pas partie du groupe de s'y rendre pour lire les fichiers.
womble
2
On dirait que ssl-cert est un nom de groupe invalide sur Ubuntu. Peut-être que cela devrait être chown root: root à la place
Atifm
1
@Atifm Le groupe ssl-cert cert a été introduit le 16.04 ou le 18.04. Je ne me souviens plus lequel.
DylanYoung
1
@DylanYoung: il est bien sûr présent sur Ubuntu 12.04, et je crois qu'il est créé par le paquet ssl-cert, utilisé pour, entre autres choses, peut-être créer des certificats auto-signés de snakeoil
MestreLion
35

Peu importe où vous les mettez, tant que vous protégez correctement vos fichiers de clé privée . Le certificat public est public; aucune protection requise - privilèges de serveur ou autres.

Pour développer la réponse, je n'utilise pas l'emplacement par défaut /etc/ssl.
Il est plus facile pour moi de garder tous les miens dans une zone séparée pour des raisons de sauvegarde + autres.

Pour Apache SSL, je conserve le mien /etc/apache2/ssl/privateou une "zone racine" similaire dans /etc/.

Exemple de configuration

Cet article est destiné à Ubuntu (Debian) + Apache, mais devrait fonctionner sur la plupart des systèmes -
Appliquez simplement les autorisations et mettez à jour l’emplacement / le chemin dans la configuration donnée (apache / nginx / etc).
Si les fichiers de clé SSL sont correctement protégés (répertoire et fichiers), tout ira bien. Notez les notes!

Créer des répertoires:

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

Note:
chmod 710supporte les ssl-certgroupes sous Ubuntu.
(Voir les commentaires)
Réglage de l' autorisation de 700le /etc/apache2/ssl/privatesera également très bien.

Placez les fichiers SSL:

Mettez les certificats publics www ssl avec les certificats intermédiaires dans /etc/apache2/ssl
Mettez les clés privées ssl dans/etc/apache2/ssl/private

Propriétaire du set:

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

Remarque:
Si vous n'avez pas de groupe ssl-cert , utilisez simplement 'root: root' sur la ligne ci-dessus ou ignorez la 2ème ligne.

Définir les autorisations:

Certificat (s) public (s)

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

Clé (s) privée (s)

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

Remarque:
L'autorisation de groupe est définie sur READ (640) en raison du groupe Ubuntu ssl-cert. «600» est bien aussi.

Activer le module SSL Apache

sudo a2enmod ssl

Éditez tous les fichiers du site Apache et activez

(voir dernier paragraphe) *

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

Redémarrez le service Apache2

sudo service apache2 restart

ou

sudo systemctl restart apache2.service

Terminé. Testez votre nouveau site SSL.

* Encore une fois, cela va au-delà de la question, mais vous pouvez copier le fichier de configuration de site SSL Apache par défaut ( sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/mysiteexample-ssl.conf) comme bon point de départ / exemple de directives / répertoires par défaut normalement utilisés sous un simple fichier (conf) Apache / SSL (Ubuntu / Debian) . Il pointe normalement vers un certificat SSL auto-signé + clé (snakeoil), des ensembles d'autorités de certification, ainsi que des directives courantes utilisées pour un site SSL donné.

Après la copie, éditez simplement le nouveau fichier .conf et ajoutez-le / supprimez / mettez-le à jour si nécessaire avec les nouvelles informations / chemins ci-dessus, puis exécutez-le sudo a2ensite mysiteexample-sslpour l'activer.

bshea
la source
Vous ne savez pas pourquoi vous suggéreriez de définir 710 pour les autorisations pour / etc / apache2 / ssl / private. Définir le bit d'exécution pour le répertoire (pour le groupe) sans définir le bit de lecture pour le répertoire (pour le groupe) n'a pas beaucoup de sens pour moi. Vouliez-vous le définir en tant que 750?
chriv
@chriv Je viens de définir des autorisations en fonction de la façon dont je vois les paramètres dans la zone SSL par défaut d'Ubuntu. Voir / etc / ssl / certs & / etc / ssl / private & ssl-certs utilisation du groupe. Voir stackoverflow.com/a/23408897/503621
lundi
1
Une explication très bien et détaillée à une question générique avec beaucoup de réponses possibles. Je vous remercie. Juste pour ajouter quelques éléments, votre <VirtualHost *:443>section dans votre document sites-available/mysite.confdevrait inclure les certificats suivants:SSLEngine on SSLCertificateFile /etc/apache2/ssl/mysite.crt SSLCertificateKeyFile /etc/apache2/ssl/private/mysite.key
George Dimitriadis le
BTW - Il est également possible de simplement combiner vos config: 80 et: 443 dans un fichier Apache ".conf". Je redirige tout ce qui frappe sur le port: 80 à: 443 / SSL quand même. Il est également possible de définir des paramètres SSL de base dans le fichier .conf et de créer un fichier de paramètres SSL «détaillé» supplémentaire (pour définir les chiffrements utilisés / etc par exemple) et de l' inclure simplement dans tous vos fichiers .conf en dehors des zones virtuelles. J'utilise ces paramètres pour «durcir» le SSL un peu et je l'inclue dans chaque site virtuel .conf. Je peux obtenir A + aux laboratoires SSL de cette manière.
bshea
10

Toutes les réponses ici semblent OK, mais je tiens à mentionner une chose que j’ai trouvée est un problème ... Si vous devez concaténer votre certificat avec des intermédiaires ou des racines pour créer un fichier chaîne, ne le mettez pas/etc/ssl/certs , car c_rehashest exécuté, il peut créer des liens symboliques de hachage vers vos certificats en raison de leurs racines ou de leurs intermédiaires.

Puis, plus tard, si vos certificats sont arrivés à expiration et que vous les supprimez et que vous ne savez pas ré-exécuter c_rehash, il se peut que des liens symboliques de hachage soient rompus dans votre /etc/ssl/certsrépertoire et que des choses étranges commencent à se produire lorsque votre ordinateur local tente de se connecter à lui-même SSL, et il ne peut pas trouver les racines pour valider. Par exemple, avec curl, j'ai soudainement commencé à obtenir:

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

Peu de temps après avoir nettoyé de vieux fichiers .crt et concaténés .pem que j'avais /etc/ssl/certs.

Stocker au moins vos chaînes ailleurs évite ce problème. Je me suis retrouvé /etc/ssl/local_certsà tenir mes certs et mes chaînes afin qu'ils ne soient pas perdus dans le fouillis des certs CA que vous trouverez dans/etc/ssl/certs

barryp
la source
2

Il n'y a pas vraiment un endroit dangereux si l' autorisation pour les fichiers individuels / répertoire est défini sur quelque chose comme chown root :0 private.keyet chmod 600 private.keypour que seul root peut le lire. Les CSR et les fichiers de certificat sont moins sensibles que vous le dites.

Avec ces autorisations, les chemins que vous mentionnez et / usr / local / ssl devraient convenir.

Jonathan Ross
la source
1
Les applications accédant aux clés privées s'exécutent souvent en tant qu'utilisateurs non root. Je suggérerais de maintenir l'accès pour le groupe ssl-cert.
Shane Madden
1
Bien compris, mais les serveurs Web comme Apache génèrent un processus 'parent' racine et supposons que nginx soit également pertinent.
Jonathan Ross
1

Les emplacements sont corrects:

  • /etc/ssl/certs/pour .crtfichier
  • /etc/ssl/privatepour .keyfichier

Le propriétaire doit être root:rootpour les deux (utilisez sudo chmod root:root <file>pour changer si nécessaire).

Permissions :

  • 644pour .crtfichier
  • 600pour .keyfichier

Cela fonctionnera pour nginx.

Rael Gugelmin Cunha
la source