Как включить мой внутренний сертификат CA для проверки обмена SSL в Chef?

15

Мы используем внутренний центр сертификации для создания сертификатов сервера в моей компании.

Нам также приходится иметь дело с прозрачным прокси, выполняющим перехват SSL (MITM).

Я регулярно сталкиваюсь с ошибками проверки SSL из-за того, что Chef не знает сертификат CA, а иногда это инструмент вокруг самого chef (berkshelf, knife; даже сам клиент chef при первом общении с сервером, поскольку chef 12 по умолчанию включает SSL).

Вопрос: Как я могу сообщить Chef о своем сертификате CA для получения действительного обмена SSL?

Tensibai
источник

Ответы:

13

Есть несколько способов добиться результата:

  1. У шеф-повара есть trusted_dirвозможность добавить сертификат в список доверенных. в документации много деталей об этом. Добавление сертификата CA в этот каталог решит проблему. knifeимеет также немного другой путь в соответствии с собственной документацией

  2. Шеф-повар использует свой собственный список сертификатов CA в /opt/chef/embedded/ssl/certs/cacert.pem. Вы можете добавить свой сертификат CA в конце этого списка, чтобы доверять ему.

Преимущество второго варианта состоит в том, что вы можете экспортировать переменную среды, SSL_CERT_FILEуказывающую на chef, cacert.pemчтобы большинство инструментов, использующих opensslбиблиотеку, знали ваш сертификат CA.

В случае самозаверяющего сертификата на сервере chef (или другом сервере, используемом в качестве цели в рецепте), knife ssl_fetchвсе команды ножа будут работать.

Чтобы добавить сертификат сервера в cacert.pem для случая 2. выше, вы можете использовать следующую команду:

# 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

Команда openssl включена в chef-dk, так что это можно сделать и под windows. Измените путь на c:\opscode\вместо /opt/. Чтобы экспортировать переменную среды, используйте set SSL_CERT_FILE=...( /Pчтобы добавить ее в вашу среду навсегда) в вашей команде.

Tensibai
источник