2016-06-01 59 views
7

Ho un'API Nodejs e utilizza ssl e https, quindi sto provando a consumarlo su un server diverso per creare un'app Web utilizzando express-js.Impossibile verificare il primo certificato in Node.js

ricevo il seguente errore quando si effettua una richiesta 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) 

Ho provato quanto segue, senza successo:

  • Aggiunta require('ssl-root-cas').inject(); e rejectUnauthorized: false, in merito alla richiesta.

  • Aggiunta process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; sul mio file principale, che mi ha dato un codice Error: socket hang up

La richiesta:

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(); 

}; 

e il file principale per il web app:

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); 

Qualsiasi suggerimento sul motivo per cui questo errore si verifica è molto apprezzato.

+0

hai trovato una soluzione per questo? Ho lo stesso problema con aws-sdk – user3375230

+0

Aveva un problema simile cercando di colpire il google + api sulla mia macchina di sviluppo su http mentre il mio server di produzione utilizza https. – Roy

risposta

7

ho risolvere questo problema utilizzando un altro pacchetto si chiama "richiesta" Inoltre, non dimenticare di aggiungere

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 

prima di chiamare l'API.

+7

Questo è terribilmente pericoloso. Vedere le risposte qui per le opzioni migliori: http://stackoverflow.com/questions/31673587/error-unable-to-verify-the-first-certificate-in-nodejs – LouisK

+0

Grazie a @LouisK, so che non è sicuro, ma è stato solo per i test. –