Comment inclure mon certificat CA interne pour valider les échanges SSL dans Chef?

15

Nous utilisons une autorité de certification interne pour créer des certificats de serveur dans mon entreprise.

Nous devons également faire face à un proxy transparent faisant l'interception SSL (MITM).

Je rencontre régulièrement des erreurs de validation SSL parce que Chef ne connaît pas le certificat CA, et parfois c'est l'outillage autour de chef lui-même (berkshelf, couteau; même chef client lui-même lorsque je parle au serveur pour la première fois depuis que chef 12 active SSL par défaut).

La question est: comment informer Chef de mon certificat CA pour obtenir des échanges SSL valides?

Tensibai
la source

Réponses:

13

Il y a deux façons d'atteindre le résultat:

  1. Le chef doit trusted_dirautoriser l'ajout de certificats à la liste de confiance. la documentation contient beaucoup de détails à ce sujet. L'ajout de votre certificat CA à ce répertoire résoudrait le problème. knifea également dans un chemin légèrement différent selon sa propre documentation

  2. Chef utilise sa propre liste de certificats CA dans /opt/chef/embedded/ssl/certs/cacert.pem. Vous pouvez ajouter votre certificat CA à la fin de cette liste pour lui faire confiance.

La deuxième option a l'avantage de vous permettre d'exporter la variable d'environnement SSL_CERT_FILEpointant vers chef cacert.pempour permettre à la plupart des outils utilisant la opensslbibliothèque de connaître votre certificat CA.

Dans le cas d'un certificat auto-signé sur le serveur chef (ou un autre serveur utilisé comme cible dans une recette), knife ssl_fetchpermettrait à toutes les commandes de couteau de fonctionner.

Pour ajouter le certificat de serveur au cacert.pem pour le cas 2. ci-dessus, vous pouvez utiliser la commande suivante:

# For a self signed CA certiticate
openssl s_client -showcerts -connect <YOUR_CHEF_SERVER>:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >> /opt/chefdk/embedded/ssl/certs/cacert.pem

# For an internal CA signed certificate:
openssl s_client -showcerts -verify 5 -connect <YOUR_CHEF_SERVER>:443 </dev/null 2>/dev/null | awk '/BEGIN/,/END/{if(/BEGIN/){a++}; certs[a]=(certs[a] "\n" $0)}; END {print certs[a]}' >> /opt/chefdk/embedded/ssl/certs/cacert.pem

export SSL_CERT_FILE=/opt/chefdk/embedded/ssl/certs/cacert.pem

La commande openssl est incluse dans chef-dk, donc cela peut aussi être fait sous windows. Modifiez le chemin d'accès au c:\opscode\lieu de /opt/. Pour exporter la variable d'environnement, utilisez set SSL_CERT_FILE=...(avec /Ppour l'ajouter définitivement à votre environnement) dans votre commande.

Tensibai
la source