web-dev-qa-db-fra.com

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

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

Cette réponse ajoute que le certificat doit aller dans /etc/ssl/certs/ mais cela semble être un endroit dangereux. Faire .crt les fichiers doivent être conservés en toute sécurité ou sont-ils considérés comme publics?

63
Adam Nelson

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

Pour ajouter à l'emplacement de la clé privée; assurez-vous de le fixer correctement ainsi que de l'avoir dedans. (chown root:ssl-cert et chmod 640)

49
Shane Madden

Peu importe où vous les mettez tant que vous protégez correctement votre fichier (s) de clé privée . Le certificat public est public; aucune protection nécessaire - privilèges du serveur ou autre.

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 toutes les miennes dans une zone distincte à cause des sauvegardes et d'autres raisons.

Pour Apache SSL, je garde le mien dans /etc/Apache2/ssl/private ou "zone racine" similaire dans /etc/.

Exemple de configuration

Ce message est destiné à Ubuntu (Debian) + Apache, mais devrait fonctionner sur la plupart des systèmes -
Il suffit d'appliquer les autorisations et de mettre à jour l'emplacement/le chemin dans la configuration donnée (Apache/nginx/etc).
Si les fichiers de clés SSL sont correctement protégés (répertoire et fichiers), tout ira bien. Notez les notes !

Créez 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

Remarque:
chmod 710 les soutiens ssl-cert groupe sous Ubuntu.
(Voir commentaires)
Définition de l'autorisation sur 700 sur /etc/Apache2/ssl/private fonctionnera également très bien.

Placer des fichiers SSL:

Mettez public www certificat (s) SSL avec certificat (s) intermédiaire (s) dans /etc/Apache2/ssl
Mettez privé clé (s) SSL dans /etc/Apache2/ssl/private

Définir le propriétaire:

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 sautez la 2ème ligne.

Définissez 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 LIRE (640) en raison du groupe Ubuntu ssl-cert. '600' est également très bien.

Activer le module SSL Apache

Sudo a2enmod ssl

Modifiez 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 du 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 de configuration (Ubuntu/Debian) Apache/SSL. Il pointe normalement vers un certificat SSL auto-signé + clé (snakeoil), des bundles CA, ainsi que des directives communs utilisés pour un site SSL donné.

Après la copie, modifiez simplement le nouveau fichier .conf et ajoutez/supprimez/mettez à jour au besoin avec les nouvelles informations/chemins ci-dessus, puis exécutez Sudo a2ensite mysiteexample-ssl pour l'activer.

36
bshea

Toutes les réponses ici semblent OK, mais je veux 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 de chaîne, ne pas = mettre ça dans /etc/ssl/certs, parce que quand c_rehash est exécuté, il peut créer des liens symboliques de hachage vers vos certificats en raison des racines ou des intermédiaires qu'ils contiennent.

Ensuite, plus tard, si vos certificats ont expiré et que vous les supprimez, et ne savez pas pour relancer c_rehash, vous avez peut-être brisé des liens symboliques de hachage dans votre /etc/ssl/certs répertoire, et des choses étranges commencent à se produire lorsque votre machine locale essaie de se connecter à elle-même via SSL, et qu'elle ne trouve pas les racines à 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 le nettoyage de certains anciens fichiers .crt et .pem concaténés que j'avais dans /etc/ssl/certs.

Stocker au moins vos chaînes ailleurs évite ce problème. J'ai fini par faire un /etc/ssl/local_certs pour conserver mes certificats et chaînes, afin qu'ils ne soient pas perdus dans le désordre des certificats CA que vous trouverez dans /etc/ssl/certs

10
barryp

Il n'y a pas vraiment d'endroit dangereux si l'autorisation pour les fichiers/répertoires individuels est définie sur quelque chose comme chown root :0 private.key et chmod 600 private.key pour que seul root puisse le lire. Les CSR et les fichiers de certificats sont moins sensibles que vous le dites.

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

2
Jonathan Ross

Les emplacements sont corrects:

  • /etc/ssl/certs/ pour .crt fichier
  • /etc/ssl/private pour .key fichier

Propriétaire doit être root:root pour les deux (utilisez Sudo chmod root:root <file> à modifier si nécessaire).

Autorisations:

  • 644 pour .crt fichier
  • 600 pour .key fichier

Cela fonctionnera pour nginx.

1
Rael Gugelmin Cunha