Javascript 在express服务器上启用HTTPS

Javascript 在express服务器上启用HTTPS,javascript,node.js,express,https,Javascript,Node.js,Express,Https,我试图将我的express服务器配置为使用HTTPS,但遇到了一些问题。我按照文档设置了HTTPS服务器,但仍然遇到一些错误 这是我的app.js var express=require('express'); var-app=express(); var server=require('https')。createServer(选项,应用程序); var io=require('socket.io')(服务器); var port=process.env.port | 3000; var f

我试图将我的express服务器配置为使用HTTPS,但遇到了一些问题。我按照文档设置了HTTPS服务器,但仍然遇到一些错误

这是我的app.js

var express=require('express');
var-app=express();
var server=require('https')。createServer(选项,应用程序);
var io=require('socket.io')(服务器);
var port=process.env.port | 3000;
var fs=需要('fs');
变量选项={
key:fs.readFileSync('/test/key.pem'),
证书:fs.readFileSync('/test/cert.pem')
};
侦听(端口、函数(){
console.log('服务器在端口%d侦听',端口);

});试一下,我想你应该有.crt格式的证书。您需要tls模块

var sslOptions = {
        key: fs.readFileSync('public/server.key'),
        cert: fs.readFileSync('public/server.crt')
};
tls.createServer(sslOptions, function (cleartextStream) {
    var cleartextRequest = net.connect({
        port: port,
        host: serverStr
    }, function () {
        cleartextStream.pipe(cleartextRequest);
        cleartextRequest.pipe(cleartextStream);
    });
}).listen(443);

端口是您的http端口。sercerStr是您的服务器地址。

IMO,问题不在于密钥的扩展,而在于所使用的ssl配置。使用
https
节点模块,为
ca、cert和key
提供正确的ssl选项,以启用带express的https

// server/index.js
const express = require('express');
const fse = require('fs-extra');
const helmet = require('helmet');
const https = require('https');
const path = require('path');

// path to cert files
const paths = {
  certFile: '/path/to/cert.pem',
  chainFile: '/path/to/fullchain.pem',
  privateFile: '/path/to/privkey.pem',
};

/* Express implementation (ignore) */
const app = express();
app.use(helmet());
app.use(express.static(path.join(__dirname, '..')));
app.get('/', (request, response) => {
  response.sendFile(path.join('index.html'));
});

// setup https
const setupHttps = () => {
  const promises = [
    fse.readFile(paths.chainFile),
    fse.readFile(paths.privateFile),
    fse.readFile(paths.certFile),
  ];

  return Promise
    .all(promises)
    .then(data => {
      const [ chainData, privateData, certData ] = data;
      const options = {
        ca: chainData.toString('utf-8'),
        cert: certData.toString('utf-8'),
        key: privateData.toString('utf-8'),
      };
      return https.createServer(
        options,
        app
      ).listen(443);
    })
    .catch(err => console.log(err));
};

return setupHttps();

编辑:我使用http头来提高安全性。

.createServer()
行中使用之前,需要初始化
选项
对象。将其移动到
createServer()
上方。