2016-06-01 16 views
7

私はNodejs APIを持っていて、それはsslとhttpsを使用していますので、express-jsを使ってWebアプリケーションを構築するために別のサーバーでそれを消費しようとしています。Node.jsの最初の証明書を確認できません

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) 

をノー成功を収めて、次のことを試してみた:

  • をリクエストに応じてrequire('ssl-root-cas').inject();rejectUnauthorized: false,を追加します。 Webアプリケーションのための

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

    とメインファイル:

    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); 
    
    くれError: socket hang up

要求コードを与えた私のメインファイル、上process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";を追加

  • このエラーがなぜ発生するかについての提案は高く評価されます。

  • +0

    解決方法を見つけましたか?私はaws-sdkと同じ問題を抱えています – user3375230

    +0

    私のプロダクションサーバーがhttpsを使用しているのとは対照的に、私の開発マシンでhttpを介してgoogle + apiをヒットしようとする同様の問題がありました。 – Roy

    答えて

    7

    私はまた、APIを呼び出す前に

    process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 
    

    を追加することを忘れないでください、それが「要求」と呼ばれる別のパッケージを使用することによって、この問題を解決します。

    +7

    これは非常に危険です。より良いオプションについては、こちらの回答をご覧ください:http://stackoverflow.com/questions/31673587/error-unable-to-verify-the-first-certificate-in-nodejs – LouisK

    +0

    ありがとう@LouisK、私はそれが安全ではないことを知っていますが、それはテスト用です –

    関連する問題