Jak dołączyć mój wewnętrzny certyfikat CA, aby sprawdzić poprawność wymiany SSL w Chef?

15

Używamy wewnętrznego urzędu certyfikacji do tworzenia certyfikatów serwerów w mojej firmie.

Mamy również do czynienia z przezroczystym proxy wykonującym przechwytywanie SSL (MITM).

Regularnie spotykam się z błędami sprawdzania poprawności SSL, ponieważ szef kuchni nie zna certyfikatu CA, a czasem jest to oprzyrządowanie wokół samego szefa kuchni (półka, nóż; nawet sam klient szefa kuchni, gdy rozmawia z serwerem po raz pierwszy, odkąd szef kuchni 12 domyślnie włącza SSL).

Pytanie brzmi: w jaki sposób mogę poinformować szefa kuchni o moim certyfikacie CA, aby uzyskać prawidłową wymianę SSL?

Tensibai
źródło

Odpowiedzi:

13

Istnieje kilka sposobów na osiągnięcie wyniku:

  1. Szef kuchni musi trusted_dirzezwolić na dodanie certyfikatu do listy zaufanych. dokumentacja ma dużo szczegółów na jej temat. Dodanie certyfikatu CA do tego katalogu rozwiązałoby problem. knifema to również nieco inną ścieżkę, zgodnie z własną dokumentacją

  2. Szef kuchni korzysta z własnej listy certyfikatów urzędu certyfikacji w /opt/chef/embedded/ssl/certs/cacert.pem. Możesz dodać certyfikat CA na końcu tej listy, aby mu zaufać.

Druga opcja ma tę zaletę, że pozwala wyeksportować zmienną środowiskową SSL_CERT_FILEwskazującą na szefa kuchni, cacert.pemaby większość narzędzi korzystających z opensslbiblioteki mogła poznać twój certyfikat CA.

W przypadku samopodpisanego certyfikatu na serwerze szefa kuchni (lub innym serwerze używanym jako cel w przepisie), knife ssl_fetchpozwoliłoby na działanie wszystkich poleceń noża.

Aby dodać certyfikat serwera do cacert.pem dla przypadku 2. powyżej, możesz użyć następującego polecenia:

# 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

Polecenie openssl jest zawarte w chef-dk, więc można to zrobić również pod Windows. Zmień ścieżkę na c:\opscode\zamiast /opt/. Aby wyeksportować zmienną środowiskową, użyj polecenia set SSL_CERT_FILE=...(z, /Paby dodać ją na stałe do środowiska) w swoim poleceniu.

Tensibai
źródło