¿Cómo incluyo mi certificado de CA interno para validar los intercambios SSL en Chef?

15

Utilizamos una Autoridad de certificación interna para crear certificados de servidor en mi empresa.

También tenemos que lidiar con un proxy transparente que realiza la intercepción SSL (MITM).

Regularmente encuentro errores de validación SSL debido a que Chef no conoce el certificado de CA y, a veces, es la herramienta (berkshelf, cuchillo, incluso el propio cliente chef cuando habla con el servidor por primera vez desde que chef 12 habilita ssl por defecto).

La pregunta es: ¿cómo hago para que Chef conozca mi certificado de CA para obtener intercambios SSL válidos?

Tensibai
fuente

Respuestas:

13

Hay un par de formas de lograr el resultado:

  1. Chef tiene trusted_dirque permitir agregar certificado a la lista de confianza. La documentación tiene muchos detalles al respecto. Agregar su certificado de CA a este directorio resolvería el problema. knifelo tiene también en una ruta ligeramente diferente según su propia documentación

  2. Chef utiliza su propia lista de certificados de CA en /opt/chef/embedded/ssl/certs/cacert.pem. Puede agregar su certificado de CA al final de esta lista para confiar en él.

La segunda opción tiene la ventaja de permitir exportar la variable de entorno SSL_CERT_FILEque apunta a chef cacert.pempara permitir que la mayor parte de las herramientas de uso de opensslla biblioteca para conocer su certificado de entidad emisora.

Para el caso de un certificado autofirmado en el servidor del chef (u otro servidor utilizado como objetivo en una receta), knife ssl_fetchpermitiría que todos los comandos de cuchillo funcionen.

Para agregar el certificado del servidor a cacert.pem para el caso 2. anterior, puede usar el siguiente comando:

# 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

El comando openssl se incluye en chef-dk, por lo que esto también se puede hacer en Windows, el parche cambia a en c:\opscode\lugar de /opt/exportar el uso de la variable de entorno set SSL_CERT_FILE=...( /Ppara agregarlo permanentemente a su entorno)

Tensibai
fuente