Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为在Express中运行的应用程序配置SSL证书?_Javascript_Node.js_Express_Https - Fatal编程技术网

Javascript 如何为在Express中运行的应用程序配置SSL证书?

Javascript 如何为在Express中运行的应用程序配置SSL证书?,javascript,node.js,express,https,Javascript,Node.js,Express,Https,我正在尝试配置我创建的Express服务器,以传递SSL证书并从http转到https 我阅读了Express文档,但找不到解决方案。他们向我提出了一些建议,比如让我们加密,但它不支持Node.js。我不知道我是否应该修改hosts文件,我已经修改了该文件以运行应用程序,或者我必须做什么。我看到了一个表单,但它只在Unix系统上工作。我展示了我配置服务器文件的方式,以防他们能帮助我,我花了三天时间寻找方法,但没有成功。我看到的那些不支持Node.js。多谢各位 我编辑问题: 很抱歉没有包括更多细

我正在尝试配置我创建的Express服务器,以传递SSL证书并从http转到https

我阅读了Express文档,但找不到解决方案。他们向我提出了一些建议,比如让我们加密,但它不支持Node.js。我不知道我是否应该修改hosts文件,我已经修改了该文件以运行应用程序,或者我必须做什么。我看到了一个表单,但它只在Unix系统上工作。我展示了我配置服务器文件的方式,以防他们能帮助我,我花了三天时间寻找方法,但没有成功。我看到的那些不支持Node.js。多谢各位

我编辑问题: 很抱歉没有包括更多细节,问题是我的应用程序不在生产环境中,我的域是临时的:michaelgram.test。我认为有了它,Lets Encrypt不会授予我证书。我不知道还能做什么。问题是应用程序是本地托管的,在我的计算机上

我再次编辑: 请原谅,忘了说我的目的是为一个应用程序创建证书,在这个应用程序中,您可以注册到Facebook,并尝试了我的同事提供的方法,但由于新的Facebook政策,它没有起作用。 如果您有其他想法,那么我的域将是michaelgram.test 谢谢你,并原谅给你带来的不便,因为你没有做好这个问题

let express=require('express');
设aws=require('aws-sdk');
设multer=require('multer');
设multerS3=require('multer-s3');
设ext=require('file-extension');
让cookieParser=require('cookie-parser');
让bodyParser=require('body-parser');
设expressSession=require('express-session');
let passport=require(‘passport’);
设michaelgram=require('michaelgram-client');
让auth=require(“./auth”)
让config=require('./config');
让端口=process.env.port | | 5050;
让client=michaelgram.createClient(config.client);
设s3=新的aws.s3({
accessKeyId:config.aws.accessKey,
secretAccessKey:config.aws.secretKey
});
让存储=multerS3({
s3:s3,
桶:“迈克尔格拉姆”,
acl:“公共读取”,
元数据:函数(请求、文件、cb){
cb(空,{fieldName:file.fieldName})
},
键:功能(请求、文件、cb){
cb(null,+Date.now()+'.+ext(file.originalname))
}
});
让upload=multer({storage:storage}).single('picture');
设app=express();
use(bodyParser.json());
use(bodyParser.urlencoded({extended:false}));
使用(cookieParser());
应用程序使用(expressSession)({
secret:config.secret,
resave:false,
saveUninitialized:false
}))
app.use(passport.initialize())
app.use(passport.session())
应用程序集(“查看引擎”、“帕格”);
应用程序使用(express.static('public'));
passport.use(auth.localStrategy);
passport.use(auth.facebookStrategy);
passport.deserializeUser(auth.deserializeUser);
passport.serializeUser(auth.serializeUser);
app.get('/',函数(req,res){
res.render('index',{title:'Michaelgram'});
})
app.get('/signup',函数(req,res){
res.render('index',{title:'Michaelgram-Signup'});
})
应用程序发布('/signup',功能(请求、回复){
让user=req.body;
client.saveUser(用户,函数(err,usr){
if(err)返回res.status(500).send(err.message)
调试器
res.redirect('/signin');
});
});
app.get('/signin',函数(req,res){
res.render('index',{title:'Michaelgram-Signin'});
})
app.post('/login',passport.authenticate('local'){
successRedirect:“/”,
failureRedirect:“/signin”
}));
app.get('/auth/facebook',passport.authenticate('facebook',{scope:'email'}));
app.get('/auth/facebook/callback',passport.authenticate('facebook'){
successRedirect:“/”,
failureRedirect:“/signin”
}));
函数ensureAuth(req、res、next){
如果(请求isAuthenticated()){
返回下一个()
}
res.status(401).send({error:'notauthenticated'})
}
app.get('/api/pictures',函数(req、res、next){
让图片=[];
setTimeout(函数(){
res.send(图片);
}, 2000)
});
app.post('/api/pictures',ensureAuth,函数(req,res){
上传(请求、恢复、功能(错误){
如果(错误){
返回res.send(500,“上传文件错误”);
}
res.send(“文件上传”);
})
})
app.get('/api/user/:username',(req,res)=>{
常量用户={
用户名:“miguelito”,
阿凡达:'',
图片:[]
}
res.send(用户);
})
app.get('/:username',函数(req,res){
res.render('index',{title:`Michaelgram-${req.params.username}`});
})
app.get('/:username/:id',函数(req,res){
res.render('index',{title:`Michaelgram-${req.params.username}`});
})
应用程序侦听(端口、功能(错误){
如果返回console.log('Hubo un error'),则返回process.exit(1);
console.log('Michaelgram escuchando en el-puerto 5050');

})
一旦您准备好了钥匙和crt,您只需参照它们启动应用程序。这些名称只是使用letsencrypt的默认命名

var options = {
    key: fs.readFileSync(__dirname + '/components/ssl/privkey.pem'),
    cert: fs.readFileSync(__dirname + '/components/ssl/fullchain.pem')
};
server = require('https').createServer(options, app);

使用TLS保护web服务器时,需要两件事:

  • 私钥
  • 服务器证书
首先,Lets Encrypt是一项完全支持您所做工作的服务。他们提供的服务允许您生成一个受信任的密钥和证书,以保护服务器上的流量,并让其他人知道它是由受信任的证书颁发机构签署的。看

如果您只是想要tls,您可以生成一个自签名证书,如下所示:

在获得证书和密钥后,这里是服务器的https配置:

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

var options = {
    key: fs.readFileSync('/etc/apache2/ssl/server.key'),
    cert: fs.readFileSync('/etc/apache2/ssl/server.crt'),
    requestCert: false,
    rejectUnauthorized: false
};


var app = express();

var server = https.createServer(options, app).listen(3000, function(){
    console.log("server started at port 3000");
});

请参阅:

,但它不支持Node.js
?!