Estou tentando me conectar a um serviço https REST externo no heroku de meu localhost com o seguinte código:
request(
{
url: config.get('host') +req.originalUrl,
method: req.method,
}, function (error, response, body) {
})
Recebo o seguinte erro no retorno de chamada:
O nome do host / IP não corresponde aos nomes alternativos do certificado: "Host: localhost. Não está nos nomes alternativos do certificado: DNS: _. Herokuapp.com, DNS: herokuapp.com "
Host: localhost. não está nos nomes alternativos do certificado: DNS: _. herokuapp.com, DNS: herokuapp.com
se eu me conectar ao mesmo serviço instalado localmente tudo funciona corretamente, por isso deve estar relacionado com https.
Qualquer ajuda?
Qual é o URL exato da sua solicitação config.get('host') +req.originalUrl
?
Eu também estou entendendo isso. Estou usando um certificado autoassinado e não quero fazer a verificação do nome do host. Eu tenho isso em meus pedidos
agentOptions: {
ca: fs.readFileSync('ca.cert.pem')
}
Como você define ignoreHostname?
Você já tentou definir a variável rejeitarUnauthorized como falsa?
pedido `` `` `` ({
url: config.get ('host') + req.originalUrl,
método: req.method,
rejeitarUnauthorized: false
},
função (erro, resposta, corpo) {
})```
`` `` ``
Seria bom se rejectUnauthorized: false
estivesse na primeira página dos documentos em algum lugar.
rejectUnauthorized: false
faz você aceitar nenhum certificado de servidor? Se for esse o caso, não considero uma solução válida.
Gostaria de verificar o servidor certificando-me de que o certificado é assinado por uma CA confiável (no meu caso, é a minha própria CA). Não quero silenciar tudo e torná-lo inseguro.
Essa coisa é horrível
Você tem que combinar de certificação do servidor CommonName
a do cliente hostname
.
Você deve combinar o CommonName da certificação do servidor com o nome do host do cliente.
Por que é esse o caso? Por que o cliente se preocupa com seu próprio nome de host existente no certificado do servidor? Trata-se da autenticação do servidor. Obrigado
Para sua informação, recebi este erro enquanto estava encaminhando solicitações. Usei request({host: 'something.com'... headers: req.headers...
O que não percebi a princípio foi que nos cabeçalhos havia host: 'localhost'
, que era o culpado. Eu o substituí e agora ele verifica se está OK.
Eu acredito que estou encontrando o mesmo problema. Recebo o seguinte erro ao usar o nó 6.10.3 e solicitar 2.88:
Erro: o nome do host / IP não corresponde aos nomes alternativos do certificado: "Host: https. Não está nos nomes alternativos do certificado:
Rastreei isso até o código do node tls.js. De alguma forma, "https." está sendo passado como o nome do host por solicitação para o nó. Se eu definir rejeitarUnauthorized como falso, meu código funcionará. Portanto, estou passando o nome de host correto na url.
Acredito que isso pode ser atenuado usando a chave de API fornecida pelo domínio de destino.
Para sua informação, recebi este erro enquanto estava encaminhando solicitações. Usei
request({host: 'something.com'... headers: req.headers...
O que não percebi a princípio foi que nos cabeçalhos haviahost: 'localhost'
, que era o culpado. Eu o substituí e agora ele verifica se está OK.
meu problema resolvido. esqueci de modificar req.header e alterar host.
Comentários muito úteis
Essa coisa é horrível