node https ssl ваше соединение не является частной ошибкой - PullRequest
3 голосов
/ 14 июля 2020

Я недавно купил сертификат ssl, и у меня проблема с google chrome, когда я захожу на свой веб-сайт, он говорит: «Ваше соединение не является частным NET :: ERR_CERT_AUTHORITY_INVALID» вот что я делаю:

const express = require("express");
const https = require('https');
const helmet = require("helmet");
const cors = require("cors");
const fs = require("fs");
const path = require("path");
const app = express();
const config = require("./config");
const passport = require("passport");
const credentials = { key: fs.readFileSync('ssl/site.key', 'utf-8'), cert: fs.readFileSync('ssl/site.crt', 'utf-8') + fs.readFileSync('ssl/site.ca-bundle', 'utf-8') };

app.use(helmet());
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(
  require("express-session")({
    secret: require("./config.json").app.secretKey,
    resave: false,
    saveUninitialized: true,
    cookie: {
      secure: false,
      maxAge: 60 * 60 * 1000 * 24 * 365,
    },
  })
);

app.use(passport.initialize());
app.use(passport.session());
passport.use(require("./service/passport"));

app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
app.use(express.static(path.join(__dirname, "views")));

app.use("/", require("./api/views"));
app.use("/auth", require("./api/auth"));
app.use("/answer", require("./api/answer"));
app.use("/user", require("./api/views/user.view"));
app.use("/courses", require("./api/views/courses.view"));
app.use("/question", require("./api/views/question.view"));
app.use("/answer", require("./api/views/answer.view"));

app.use("/api/user", require("./api/user"));
app.use("/api/course", require("./api/course"));
app.use("/api/feedback", require("./api/feedback"));
app.use("/api/help", require("./api/help"));
app.use("/api/questions", require("./api/question"));

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

httpsServer.listen(config.app.port);

console.log(credentials);
//app.listen(config.app.port);

Я видел, что у многих людей была одна и та же проблема, что мне делать?

Ответы [ 2 ]

3 голосов
/ 18 июля 2020

По-видимому, потребовалось несколько дней, чтобы сертификация была помечена как безопасная, вот код в конце:

const express = require("express");
const https = require('https');
const helmet = require("helmet");
const cors = require("cors");
const fs = require("fs");
const path = require("path");
const app = express();
const config = require("./config");
const passport = require("passport");
const credentials = { key: fs.readFileSync('ssl/site.key', 'utf-8'), cert: fs.readFileSync('ssl/site.crt', 'utf-8'), ca: fs.readFileSync('ssl/site.ca-bundle', 'utf-8') };

app.use(helmet());
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(
  require("express-session")({
    secret: require("./config.json").app.secretKey,
    resave: false,
    saveUninitialized: true,
    cookie: {
      secure: false,
      maxAge: 60 * 60 * 1000 * 24 * 365,
    },
  })
);

app.use(passport.initialize());
app.use(passport.session());
passport.use(require("./service/passport"));

app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
app.use(express.static(path.join(__dirname, "views")));

app.use('/', require('./api/home'));
app.use("/auth", require("./api/auth"));
app.use("/answer", require("./api/answer"));
app.use('/material', require('./api/material'));
app.use("/user", require("./api/user"));
app.use("/courses", require("./api/course"));
app.use('/feedback', require('./api/feedback'))
app.use("/question", require("./api/question"));
app.use("/answer", require("./api/answer"));

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

httpsServer.listen(config.app.port);

Также я использовал сертификат, который я сгенерировал через openssl, а не тот, который я получил от сайт.

0 голосов
/ 14 июля 2020

Вам необходимо собрать сертификат сайта и промежуточные сертификаты в один буфер и передать этот комбинированный буфер в качестве опции cert в https.createServer(). Поэтому замените это:

const credentials = { key: fs.readFileSync('ssl/key.pem'), cert: fs.readFileSync('ssl/crt.pem'), ca: fs.readFileSync('ssl/ceraut.ca-bundle') };

следующим:

const credentials = { key: fs.readFileSync('ssl/key.pem'), cert: fs.readFileSync('ssl/crt.pem') + fs.readFileSync('ssl/ceraut.ca-bundle') };

(Предполагается, что ваш файл ca-bundle содержит промежуточные сертификаты в правильном порядке и в формате PEM.) Это возможно. что вам также может потребоваться добавить новую строку между содержимым двух файлов, если закрывающая новая строка из файла сертификата сайта каким-то образом была потеряна.

Не передавайте параметр ca в createServer() в все. Эта опция определяет нестандартную коллекцию сертификатов root, которая должна использоваться для проверки полученного сертификата. Вашему серверу эта опция не нужна.

Подробнее см. https://nodejs.org/docs/latest-v10.x/api/tls.html#tls_tls_createsecurecontext_options или эквивалент для соответствующей версии Node, хотя точная версия, вероятно, не имеет значения. Документация по этим параметрам была стабильной на протяжении многих лет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...