Há algumas maneiras de alcançar o resultado:
O chef precisa trusted_dir
permitir adicionar certificado à lista confiável. a documentação tem muitos detalhes sobre isso. Adicionar seu certificado de CA a esse diretório resolveria o problema. knife
tem também em um caminho um pouco diferente, de acordo com sua própria documentação
O Chef usa sua própria lista de certificados da CA em /opt/chef/embedded/ssl/certs/cacert.pem
. Você pode adicionar seu certificado de CA no final desta lista para confiar nele.
A segunda opção tem a vantagem de permitir exportar a variável de ambiente SSL_CERT_FILE
apontando para o chef cacert.pem
para permitir que a maioria das ferramentas usando a openssl
biblioteca conheça seu certificado de CA.
No caso de um certificado autoassinado no servidor chef (ou outro servidor usado como destino em uma receita), knife ssl_fetch
permitiria que todos os comandos de faca funcionassem.
Para adicionar o certificado do servidor ao cacert.pem para o caso 2. acima, você pode usar o seguinte 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
O comando openssl está incluído no chef-dk; portanto, isso também pode ser feito no Windows; o patch muda para em c:\opscode\
vez de /opt/
e para exportar o uso da variável de ambiente set SSL_CERT_FILE=...
(com /P
para adicioná-lo permanentemente ao seu ambiente)