Mensagem de erro
error Error: unable to get local issuer certificate
Também aparece como
- YN0001: RequestError: unable to get local issuer certificate
O Yarn 1.x imprime “error Error: unable to get local issuer certificate” seguido de um stack trace do Node.js. Se o registro envia só o certificado folha, o texto passa a ser “unable to verify the first certificate”.
O que significa
O Yarn Classic recebeu do registro uma cadeia de certificados (certificado folha e intermediário), mas o Node.js não confia na raiz acima dela. O Yarn repassa o erro do Node.js sem alterações. Em geral, o registro não tem nada de errado; o que falta nesta máquina é a raiz da empresa ou do proxy à qual a cadeia leva.
Por que acontece
Um registro privado com certificado assinado por uma CA da empresa
comumArtifactory, Nexus ou Verdaccio com certificados de uma CA interna cuja raiz o Node.js não conhece.
Um proxy com inspeção de TLS que envia o próprio intermediário emissor
comumProxies que enviam o certificado folha e o intermediário, mas não a própria raiz, geram este código em vez de “self-signed certificate in certificate chain”.
O lockfile aponta para outro host de registro
ocasionalO yarn.lock guarda as URLs completas dos tarballs. Um lockfile gerado a partir de um espelho privado continua baixando desse host mesmo quando a configuração do registro muda.
Como corrigir
- 1.
Definir o cafile do Yarn 1
Aponte o Yarn para a raiz da empresa (ou para um bundle que inclua também as raízes públicas, já que o cafile substitui as raízes padrão nas requisições ao registro).
bash yarn config set cafile /etc/ssl/private-ca/corp-root-ca.pem - 2.
Ou usar NODE_EXTRA_CA_CERTS
Adiciona a raiz à lista embutida do Node.js para o Yarn e para qualquer outro processo Node.js iniciado com a variável.
bash export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-root-ca.pem yarn install --frozen-lockfile - 3.
Yarn 4: httpsCaFilePath
O Yarn 4 imprime a falha como “YN0001: RequestError: unable to get local issuer certificate” e obtém o arquivo de CA a partir de httpsCaFilePath no .yarnrc.yml.
yaml # Yarn 4: .yarnrc.yml httpsCaFilePath: /etc/ssl/private-ca/corp-root-ca.pem - 4.
Verificar quais hosts o lockfile usa
Se as URLs resolvidas apontam para um espelho interno, a correção deve ser feita no certificado desse espelho ou no seu trust store, e não na configuração do registro.
bash # Which hosts does the lockfile download from? grep -oE 'resolved "https://[^/]+' yarn.lock | sort | uniq -c