Erros de TLS só na VPN corporativa: corrija o armazenamento de confiança certo
A mesma ferramenta, o mesmo portátil, só a VPN quebra o TLS. Leia a mensagem, encontre o pacote de CA que o binário lê e adicione uma raiz em vez de desativar as verificações.
A compilação Go, a instalação do Composer e o cliente Python funcionam em casa e todos falham dentro da VPN da empresa. Esse padrão fala do caminho, não da aplicação. Algo no túnel mudou a cadeia de certificados que o seu processo vê, ou reiniciou o handshake antes de qualquer cadeia chegar. As duas falhas parecem iguais num terminal e exigem respostas completamente diferentes.
Três mensagens, três mecanismos
O erro x509 certificate signed by unknown authority significa que uma cadeia foi construída e que a sua raiz falta no armazenamento de confiança que esse processo usa. O erro self-signed certificate in certificate chain normalmente significa que um proxy de inspeção respondeu com o seu próprio certificado, que é uma cadeia que o seu ambiente de execução não reconhece. Um SSL EOF durante o handshake significa que a ligação foi fechada antes de ser enviado qualquer certificado utilizável, e isso é um dispositivo intermédio que rejeita o ClientHello, não um problema de confiança de todo.
Adicionar uma opção de insegurança faz as três mensagens desaparecerem enquanto a interceção fica no lugar, e remove a verificação que apanharia um atacante real.
Encontre o pacote que o processo lê de facto
A raiz corporativa instalada no armazenamento do Windows corrige navegadores e aplicações .NET que consultam o armazenamento do sistema. Não faz nada por uma compilação a correr dentro de um contentor, que traz o seu próprio pacote de CA, nem por um processo Python com certifi ou um processo Node com a sua lista incluída. O Go lê o conjunto do sistema do ambiente em que o binário corre, ou seja, o contentor e não o portátil. Por isso uma só máquina produz, ao mesmo tempo, um navegador que funciona e uma ferramenta de compilação que falha.
Pergunte à ferramenta em vez de presumir. python3 -c "import ssl; print(ssl.get_default_verify_paths())" imprime os ficheiros que o Python vai consultar, e node -e "console.log(process.env.NODE_EXTRA_CA_CERTS)" mostra se já existe uma substituição definida. Para um contentor, execute a mesma verificação dentro da imagem, porque é esse o ambiente que a compilação usa de facto.
Instale uma raiz onde a compilação corre
Obtenha a raiz de inspeção junto do departamento de TI como ficheiro PEM e verifique a impressão digital por um canal separado antes de confiar nela. Nas imagens derivadas de Debian, copie-a para /usr/local/share/ca-certificates/ e execute update-ca-certificates; as imagens da família RHEL usam update-ca-trust depois de colocar o ficheiro em /etc/pki/ca-trust/source/anchors/. Numa compilação de contentor, acrescente esses passos antes do comando que falha, para que a camada fique em cache acima da instalação das dependências.
Para um devcontainer local, monte o PEM e execute o mesmo comando de atualização no arranque em vez de o cozer numa imagem pessoal que ninguém mais consegue reproduzir. As ferramentas que trazem o seu próprio pacote precisam da sua própria substituição documentada: o pip tem uma definição de certificado, o npm tem uma definição cafile, e a maioria das outras aceita as variáveis de ambiente padrão.
Isto não é o mesmo que aceitar qualquer certificado. Está a acrescentar uma raiz concreta, obtida junto da parte que faz a inspeção, a um ambiente, e a verificação continua ativa para todas as outras cadeias. Registe que ficheiro foi acrescentado e quando expira, porque uma raiz de inspeção é renovada como qualquer outra CA.
Quando o handshake morre antes de um certificado
Se nada for apresentado, nenhuma alteração ao armazenamento de confiança vai ajudar. Compare o mesmo pedido com o túnel ativo e inativo, e depois inspecione a cadeia diretamente com openssl s_client -connect host:443 -servername host -showcerts. Uma ligação que se completa fora da VPN e é reiniciada dentro dela é uma decisão de política do dispositivo intermédio, e o remédio é uma exceção para esse anfitrião, não outro certificado. Peça que o registo de pacotes ou o ponto final da API passem sem modificação.
Dividir o túnel para que a ferramenta contorne a VPN evita a inspeção desse tráfego, o que pode violar a política e não torna a ferramenta fidedigna.
Registe o resultado por ferramenta
Uma nota curta que enumere o binário, o ficheiro de confiança que ele lê, a variável de ambiente em jogo e a exceção aprovada poupa à pessoa seguinte todo o diagnóstico. Mantenha a nota por ferramenta e não por portátil, porque o portátil raramente é o que mudou.
E mantenha duas frases separadas no ticket: instalámos uma raiz corporativa concreta, e desativámos a verificação. Só uma das duas é uma ação de suporte.