【问题标题】:Express JS, working with HTTPS does not load pageExpress JS,使用 HTTPS 不会加载页面
【发布时间】:2018-03-07 14:37:59
【问题描述】:

我想使用 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.keypublic.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 错误消息。

我错过了什么?

【问题讨论】:

  • options 是什么?
  • @baao 哎呀。我已经更新了我的问题
  • 如果指定了编码选项,则 fs.readFileSync 返回一个字符串,否则返回一个缓冲区。所以需要指定编码才能获取内容为字符串。
  • @baao 我添加了编码,仍然https 没有在我的浏览器中加载

标签: javascript node.js express ssl


【解决方案1】:

尝试添加以下代码,我认为是您需要通过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);

我希望这对你有用

【讨论】:

  • 即使我添加了utf8encoding 打开https 页面也不起作用
【解决方案2】:

可能您的 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
  • An ERR_SSL_PROTOCOL_ERROR 表示浏览器无法验证服务器提供的证书并认为它是假的,这是因为它没有由任何受信任的签名第三方(由您签名)。要避免这种情况,请尝试将证书添加到您的浏览器。 See this dicussion for more
【解决方案3】:

我相信你的代码和逻辑没有问题... 如果您使用 chrome 作为浏览器并且它给出了这样的错误,那可能是因为您使用的是自签名证书...

在测试的情况下,有办法解决...但如果可以的话,我建议您购买 SSL 证书...

【讨论】:

    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2017-09-27
    • 2020-11-22
    相关资源
    最近更新 更多