2017-11-13 1 views
-1

OpenSSL을 통해 내 웹 사이트의 SSL 인증서와 키를 성공적으로 만들었습니다. 나는 그들을 서버의 폴더에 업로드했다. 서버를 시작할 때 오류가 발생하지 않습니다.SSL을 사용하는 Node.js 웹 사이트에서 "연결 거부"오류가 발생했습니다.

하지만 https : //를 사용하여 브라우저에서 웹 사이트를로드하려고하면 "연결 거부 됨"오류가 발생합니다.

var app = require('../app'); 
    var debug = require('debug')('gameserver:server'); 
    const https = require('https'); 
    const fs = require('fs'); 

    const options = { 
     port: normalizePort(process.env.PORT || '80'), 
     key: fs.readFileSync('../keys/key.key'), 
     cert: fs.readFileSync('../keys/cert.crt') 
    }; 

    var server = https.createServer(options); 
    require('../config/socket')(server); 

    server.listen(port); 
    server.on('error', onError); 
    server.on('listening', onListening); 

    function normalizePort(val) { 
     var port = parseInt(val, 10); 

     if (isNaN(port)) { 
      return val; 
     } 

     if (port >= 0) { 
      return port; 
     } 

     return false; 
    } 

    function onError(error) { 
     if (error.syscall !== 'listen') { 
      throw error; 
     } 

     var bind = typeof port === 'string' 
      ? 'Pipe ' + port 
      : 'Port ' + port; 

     switch (error.code) { 
      case 'EACCES': 
       console.error(bind + ' requires elevated privileges'); 
       process.exit(1); 
       break; 
      case 'EADDRINUSE': 
       console.error(bind + ' is already in use'); 
       process.exit(1); 
       break; 
      default: 
       throw error; 
     } 
    } 

    function onListening() { 
     var addr = server.address(); 
     var bind = typeof addr === 'string' 
      ? 'pipe ' + addr 
      : 'port ' + addr.port; 
     debug('Listening on ' + bind); 
    } 

어떤 제안 : 여기

코드는 내가 HTTPS 서버를 만드는 데 사용하고 있습니까?

+1

포트 443을 실행할 수 있습니까? 안전하지 않은 인증서를 사용하여 브라우저에서 진행 하시겠습니까? – Theo

+0

이미 시도했습니다. 동일한 결과 – Bobonik

답변

0

열쇠/인증서가 유효합니까?

다음 명령은 표시되어야 동일한 결과 :

openssl rsa -noout -modulus -in mykey.key | openssl md5 ; openssl x509 -noout -modulus -in mykey.crt | openssl md5 ; 

아니면 노드는 대신 .PEM를 사용하여 간단하게 .KEY과 .PEM의가 .crt CONCAT 만 .PEM 키 파일 관리 .KEY :

cat server.crt server.key > server.pem 

는 그 다음 PEM을 확인은 :

openssl verify -CAfile server.pem server.crt; 
0

나는이 문제를 해결할 수 있었다. 실제로 포트 443이 필요했습니다. 또한 createServer 함수에서 app을 매개 변수로 전달하는 것을 잊었습니다. 다음은 작동 예제입니다.

var app = require('../app'); 
var debug = require('debug')('gameserver:server'); 
const https = require('https'); 
const fs = require('fs'); 

const options = { 
    port: normalizePort(process.env.PORT || '80'), 
    key: fs.readFileSync('../keys/key.key'), 
    cert: fs.readFileSync('../keys/cert.crt') 
}; 

    var server = https.createServer(options, app).listen(443, function() { 
    console.log("Express server listening on port 443"); 
}); 
require('../config/socket')(server); 

server.listen(port); 
server.on('error', onError); 
server.on('listening', onListening); 

function normalizePort(val) { 
    var port = parseInt(val, 10); 

    if (isNaN(port)) { 
     return val; 
    } 

    if (port >= 0) { 
     return port; 
    } 

    return false; 
} 

function onError(error) { 
    if (error.syscall !== 'listen') { 
     throw error; 
    } 

    var bind = typeof port === 'string' 
     ? 'Pipe ' + port 
     : 'Port ' + port; 

    switch (error.code) { 
     case 'EACCES': 
      console.error(bind + ' requires elevated privileges'); 
      process.exit(1); 
      break; 
     case 'EADDRINUSE': 
      console.error(bind + ' is already in use'); 
      process.exit(1); 
      break; 
     default: 
      throw error; 
    } 
} 

function onListening() { 
    var addr = server.address(); 
    var bind = typeof addr === 'string' 
     ? 'pipe ' + addr 
     : 'port ' + addr.port; 
    debug('Listening on ' + bind); 
} 
+0

또한 권한이없는 사용자 (루트가 아님)는 1024 이하의 포트에서 청취 소켓을 열 수 없습니다. https://stackoverflow.com/questions/9164915/node-js-eacces- 가장 많이 듣는 포트가 – Theo

+0

일 때 어쩌면 포트 443을 제안하는 의견을 줄 수도 있습니다. – Theo