Я хочу запустить мое веб-приложение с помощью https. Я создал сам подписанный ключ и сертификат с помощью этой команды:
openssl req -newkey rsa:2048 -sha256 -nodes -keyout key.key -x509 -days 365 -out public.pem -subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=my.example.com"
Это создало для меня key.key
nad public.pem
.
Теперь я хочу назначить их моему экспресс-заявлению:
const app = express();
const https = require('https');
const http = require('http');
const fs = require('fs');
app.get('/*', (req, res) => {
res.send("Hello");
});
const options = {
key: fs.readFileSync('${__dirname}/key.key'), // Path to file with PEM private key
cert: fs.readFileSync('${__dirname}/public.pem') // Path to file with PEM certificate
};
https.createServer(options, app).listen(443);
http.createServer(app).listen(80);
Когда я открываю my.example.com/
он успешно показывает мне текст сообщения Hello
. Как бы то ни было, когда я открываю его так: https://my.example.com/
мой браузер не открывает эту страницу и показывает сообщение об ошибке ERR_SSL_PROTOCOL_ERROR
.
Что я упустил?
попробуйте добавить следующий код, я думаю, что вам нужно открыть https
var fs = require('fs');
var https = require('https');
var express = require('express');
var key = fs.readFileSync('sslcert/server.key', 'utf8');
var cert = fs.readFileSync('sslcert/server.crt', 'utf8');
var cred = {key: key, cert: cert};
var app = express();
var serv = https.createServer(cred, app);
serv.listen(443);
Я надеюсь, что это сработает для вас
utf8
кодировку, открытие https
не работает
Вероятно, ваш SSL создан неправильно.
Пытаться:
openssl genrsa -out key.pem 2048
openssl req -new -key key.pem -out client.csr
openssl x509 -req -in client.csr -signkey key.pem -out cert.pem
pem
и мой браузер все еще выдает меня ERR_SSL_PROTOCOL_ERROR
ERR_SSL_PROTOCOL_ERROR
означает, что браузер не смог проверить сертификат, представленный сервером, и предположил, что он является фальшивым, потому что он не подписан какой-либо доверенной третьей стороной (подписан вами). Чтобы обойти это, попробуйте добавить сертификат в ваш браузер. Смотрите это обсуждение для более
Я считаю, что с вашим кодом и логикой нет ничего плохого... если вы используете Chrome в качестве браузера, и он дает такую ошибку, вероятно, потому, что вы используете самоподписанный сертификат...
в случае теста есть способ... но я рекомендую вам купить сертификат SSL, если вы можете...
options
?