web-dev-qa-db-fra.com

Impossible de vérifier le premier certificat dans Node.js

J'ai une API Nodejs et elle utilise ssl et https, donc j'essaie de la consommer sur un autre serveur pour construire une application web en utilisant express-js.

Je reçois l'erreur suivante lors d'une demande GET:

events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: unable to verify the first certificate
    at Error (native)
    at TLSSocket.<anonymous> (_tls_wrap.js:1017:38)
    at emitNone (events.js:67:13)
    at TLSSocket.emit (events.js:166:7)
    at TLSSocket._init.ssl.onclienthello.ssl.oncertcb.TLSSocket._finishInit (_tls_wrap.js:582:8)
    at TLSWrap.ssl.onclienthello.ssl.oncertcb.ssl.onnewsession.ssl.onhandshakedone (_tls_wrap.js:424:38)

J'ai essayé ce qui suit, sans succès:

  • Ajout de require('ssl-root-cas').inject(); et rejectUnauthorized: false, À la demande.

  • Ajout de process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; Sur mon fichier principal, ce qui m'a donné un Error: socket hang up

Le code de demande:

var service_bus = require('service_bus');
var error_engine = require('error_engine');

exports.get = function(call_back){

    function request_service() {
        require('ssl-root-cas').inject();

    var end_point = {
        Host: "www.xxxx.com",
        port: "4433",
        path: "/api/xxx/xx/",
        method: "GET",
        headers: {
            "Content-Type": "application/json",
            "X-app-key": "xxxxxxxxxxxxxxxxxxxxxxxxxx"
        },
        is_ssl: true
    };


 service_bus.call(end_point, {}, function (error, result) {
     console.log(error);
        if (!error) {
             return call_back(result);
        }
        else {
            return call_back(error_engine.get_error_by_code('1500', ''));
        }
    });
}

request_service();

};

et le fichier principal de l'application Web:

var express  = require('express');
var exphbs   = require('express-handlebars');
var path     = require('path');
var passport = require('passport');
var session  = require('express-session');
var uuid     = require("node-uuid");
var cookieParser = require('cookie-parser');
var bodyParser   = require('body-parser');
var mongoose = require('mongoose');
var app      = express();

app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');

app.use(cors());
app.use(express.static(__dirname + '/public'));
app.use('img',express.static(path.join(__dirname, 'public/images')));
app.use('js',express.static(path.join(__dirname, 'public/js')));
app.use('css',express.static(path.join(__dirname, 'public/css')));
app.use('fonts',express.static(path.join(__dirname, 'public/fonts')));
//app.use(exphbs.registerHelper('paginate', paginate));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(passport.initialize());
app.use(passport.session());
app.use(session({
    proxy: true,
    resave: true,
    saveUninitialized: true,
    uuid: function(req) {
        return uuid()
    },
    secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}));


require("./xxxxxxx/endpoints")(app);
require("./xxxxxxxx/endpoints")(app);
require("./xxxxxxxx/endpoints")(app, passport);

mongoose.connect("mongodb://localhost/database");
app.listen(8080);

Toute suggestion expliquant pourquoi cette erreur se produit est très appréciée.

11
Sideeq Youssef

Je résout ce problème en utilisant un autre package appelé "demande", n'oubliez pas d'ajouter

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

avant d'appeler l'API.

1
Sideeq Youssef