Recentemente, após instalar uma aplicação NodeJS (MEAN Stack) deparei-me com o erro “Unable to verify leaf signature”. Após alguns despites conclui que a dificuldade encontrada estava relacionada com a cadeia de certificação associada ao certificado SSL utilizado pela aplicação. A minha primeira abordagem foi verificar no servidor NGINX a correta configuração do certificado e devida cadeia, no entanto todas as configurações estavam de acordo com as especificações, desta forma conclui que o a situação estava relacionada com servidor aplicacional (NodeJS).
Para tornar a aplicação funcional executei o seguinte procedimento no servidor aplicacional:
npm install ssl-root-cas
Este pacote NodeJS contem vários certificados intermédios que são “confiáveis” pelo browser mas não pelo NodeJS
var sslRootCAs = require('ssl-root-cas/latest')
sslRootCAs.inject()
Desta forma os certificados em falta serão adicionados.
Para além desta situação foi-me necessário adicionar mais certificados a este modulo pois por defeito os que eu necessitava não se encontravam neste “bundle”, para tal foi ncessário fazer o download dos certificados em falta para tal utilizei o seguinte procedimento:
require('ssl-root-cas/latest')
.inject()
.addFile(__dirname + '/certificadointermedioemfalta.crt');