версия ssl или несоответствие шифров ExpressJS

#javascript #node.js #ubuntu #ssl #lets-encrypt

Вопрос:

У меня проблема с https в express, и я действительно не понимаю этого:

Это из моего последнего проекта (он работает):

index.js:

 var fs = require('fs');

var http = require('http');
var https = require('https');

var privateKey  = fs.readFileSync(__dirname   '/cert/server.key', 'utf8');
var certificate = fs.readFileSync(__dirname   '/cert/server.cert', 'utf8');

var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);

httpServer.listen(80);
httpsServer.listen(443);

//Force https
app.use(function(req, res, next) {
  if(!req.secure) {
    return res.redirect(['https://', req.get('Host'), req.url].join(''));
  }
  next();
});
 

Это из моего текущего проекта (не работает):

index.js:

 var fs = require('fs');

 var configRaw = fs.readFileSync(__dirname   '/config.json', 'utf8', function(err, data) {
     if(err) {
         return abort('Can not read/ find'   __dirname   '/config.json'); //FIXME
     }
 });

 var config = JSON.parse(configRaw);

 console.log('  - loading webserver script..');
 var webServer = require(__dirname   '/lib/web_server.js');

 webServer.init(config.httpPort, config.httpsPort);
 

web_server.js:

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

var privateKey = fs.readFileSync(__dirname   '/../ssl/server.key', 'utf8');
var certificate = fs.readFileSync(__dirname   '/../ssl/server.cert', 'utf8');

var credential = { key: privateKey, vert: certificate };
var express = require('express');
var app = express();

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credential, app);

this.init = function(httpPort, httpsPort){
   httpServer.listen(httpPort);
   httpsServer.listen(httpsPort);
}

app.use(function(req, res, next) {
if(!req.secure) {
    return res.redirect(['https://', req.get('Host'), req.url].join(''));
}
   next();  
});
 

Я использую тот же сертификат и ключ, что и раньше, и никогда не получал ошибку fs при чтении файла или чего-то в этом роде.

Но когда я захожу на локальный хост через браузер, я получаю следующее сообщение: ERR_SSL_VERSION_OR_CIPHER_MISMATCH.

Пожалуйста, имейте в виду, что я довольно новичок в Node.js — заранее большое вам спасибо! 😉

Комментарии:

1. Действительно ли ваш реальный код имеет vert: certificate вместо cert: certificate этого ?

2. Примечание для себя: нужно больше спать! — Но все же большое вам спасибо! Я чуть не сошел с ума из-за этого. 😉 (Ответьте, чтобы я мог принять!)

3. Я поражен тем, как переполнение стека может найти кого-то, у кого такие же опечатки, как у вас

Ответ №1:

Похоже, у тебя опечатка:

 var credential = { key: privateKey, vert: certificate };
 

«верт» вместо «сертификат» 🙂