express.js 서버에 SSL 인증서를 어떻게 설정합니까?


128

이전 버전의 express에서는 다음과 같이 할 수있었습니다.

express.createServer({key:'keyFile', cert:'certFile'});

그러나 최신 버전의 express에서는 더 이상 작동하지 않습니다.

var app = express();

app.use()인증서를 설정하기 위해 전화해야합니까 ? 그렇다면 어떻게?

답변:


151

https.createServer에 대한 노드 문서Express 문서 를 참조하십시오 ( 표현식 사용 권장).

var privateKey = fs.readFileSync( 'privatekey.pem' );
var certificate = fs.readFileSync( 'certificate.pem' );

https.createServer({
    key: privateKey,
    cert: certificate
}, app).listen(port);

createServer에 대한 다른 옵션은 다음에 있습니다. http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener


노드에서 흠 : https.createServer (options, [requestListener]) 그래서 응용 프로그램을 전달해도 괜찮습니까? 그 응용 프로그램은 '개체'가 아닙니다 ...
murvinlai

1
'app'의 함수 서명은 무엇입니까? 나는 github에서 급행을 찾으려고 노력하지만 그것이 필요하다는 것을 보지 못한다.
murvinlai

1
createServerin 의 정의를 살펴보십시오 connect.js(express는 단지 이것을 connect에서 상속합니다). 올바른 서명을 가진 함수를 반환한다는 것을 알 수 있습니다. connect()는 단순히 별칭 connect.createServer()이며 따라서 express()추가 초기화를 수행하지만 결과는 여전히 요청 처리기로 사용하기에 적합한 함수입니다.
ebohlman

11
@Qix-OPs 예제에서 app정의됩니다. 이 답변은 만족합니다.
Seiyria

4
.pem 파일을 얻는 방법에 대한 개요가 있습니까? 내 인증 공급자의 .crt 파일이 두 개 있습니다.
SCBuergel.eth

103

다음 상용구 코드로 SSL을 사용할 수있었습니다.

var fs = require('fs'),
    http = require('http'),
    https = require('https'),
    express = require('express');

var port = 8000;

var options = {
    key: fs.readFileSync('./ssl/privatekey.pem'),
    cert: fs.readFileSync('./ssl/certificate.pem'),
};

var app = express();

var server = https.createServer(options, app).listen(port, function(){
  console.log("Express server listening on port " + port);
});

app.get('/', function (req, res) {
    res.writeHead(200);
    res.end("hello world\n");
});

1
실제로 브라우저에서 hello world를 어떻게 보십니까? 127.0.0.1:8000 에서 오류 107 (net :: ERR_SSL_PROTOCOL_ERROR) : SSL 프로토콜 오류가 발생합니다.
aCuria

너무 빨리 투표했습니다. 나는 얻는다-오류 : addListener는 Function의 인스턴스 만 취함
Meekohi

꽤 오래 전에 작성된 것을 명심하십시오. 최신 버전의 Express 또는 Node.js에서는 더 이상 작동하지 않을 수 있습니다.
geoffreak

8
이 기간이 너무 늦었지만 SSL_PROTOCOL_ERROR는 http : // <ssl_enabled_endpoint>를 사용하고 있기 때문에 발생할 수 있습니다. https : // <ssl_enabled_endpoint>이어야합니다.
andreimarinescu

9

이것은 Express 4.0의 작업 코드 입니다 .

express 4.0은 3.0과는 매우 다릅니다.

4.0 / bin / www 파일이 있으며 여기에 https를 추가합니다.

"npm start"는 Express 4.0 서버를 시작하는 표준 방법입니다.

readFileSync () 함수는 __dirname get current directory를 사용해야합니다.

require () use ./ 는 현재 디렉토리를 참조하십시오.

먼저 private.key 및 public.cert 파일을 / bin 폴더에 넣습니다 . WWW 파일과 같은 폴더 입니다.

해당 디렉토리를 찾을 수 없음 오류 :

  key: fs.readFileSync('../private.key'),

  cert: fs.readFileSync('../public.cert')

오류, 해당 디렉토리를 찾을 수 없습니다

  key: fs.readFileSync('./private.key'),

  cert: fs.readFileSync('./public.cert')

작업 코드는

key: fs.readFileSync(__dirname + '/private.key', 'utf8'),

cert: fs.readFileSync(__dirname + '/public.cert', 'utf8')

완전한 https 코드는 다음과 같습니다

const https = require('https');
const fs = require('fs');

// readFileSync function must use __dirname get current directory
// require use ./ refer to current directory.

const options = {
   key: fs.readFileSync(__dirname + '/private.key', 'utf8'),
  cert: fs.readFileSync(__dirname + '/public.cert', 'utf8')
};


 // Create HTTPs server.

 var server = https.createServer(options, app);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.