相关疑难解决方法(0)

使用node.js/express自动进行HTTPS连接/重定向

我一直在努力通过我正在开发的node.js项目来设置HTTPS.我基本上遵循了此示例的node.js文档:

// curl -k https://localhost:8000/
var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)

现在,当我这样做

curl -k https://localhost:8000/
Run Code Online (Sandbox Code Playgroud)

我明白了

hello world
Run Code Online (Sandbox Code Playgroud)

正如所料.但如果我这样做

curl -k http://localhost:8000/
Run Code Online (Sandbox Code Playgroud)

我明白了

curl: (52) Empty reply from server
Run Code Online (Sandbox Code Playgroud)

回想起来,这似乎很明显,它会以这种方式工作,但与此同时,最终访问我的项目的人不会输入https:// yadayada,我希望从他们点击的那一刻起所有流量都是https网站.

我怎样才能将所有传入流量传递给https的节点(以及我正在使用的Express),无论是否指定了它?我找不到任何解决此问题的文档.或者只是假设在生产环境中,节点有一些位于它前面的东西(例如nginx)来处理这种重定向?

这是我第一次涉足网络开发,所以如果这是显而易见的事情,请原谅我的无知.

https node.js express

159
推荐指数
12
解决办法
16万
查看次数

HTTPS重定向仅在重新加载页面时有效

我在我的页面上安装了一个SSL证书,它运行一个Node.js + Express应用程序,将Express服务器配置为始终强制重定向到HTTP,一切正常,但https重定向仅在重新加载页面时或者再次按下回车键.我录制了一个gif来展示会发生什么:

http://recordit.co/uBiW3bcQCM

这是我的Express配置.

var express = require('express');
var path = require('path');
var serveStatic = require('serve-static');

var forceSsl = function (req, res, next) {
  if (req.headers['x-forwarded-proto'] !== 'https') {
    return res.redirect(['https://', req.get('Host'), req.url].join(''));
  }
  return next();
};

app = express();
app.use(serveStatic(__dirname));

if(process.env.NODE_ENV === 'production') {
  app.use(forceSsl);
}

app.all('/*', function(req, res) {
  res.sendfile('index.html');
});

var port = process.env.PORT || 5000;
app.listen(port);

console.log('server started '+ port);
Run Code Online (Sandbox Code Playgroud)

我的应用程序在Heroku上运行.任何人都可以帮我找出发生了什么事吗?

提前致谢.

ssl https heroku node.js express

12
推荐指数
1
解决办法
212
查看次数

使用带有 SSL (HTTPS) 的 Boost-Beast (Asio) http 客户端

我是 SSL 和 Boost-Beast 库以及 C++ 的新手,但这是另一回事。我有一个关于在 Beast 中使用 HTTPS (SSL) 的问题。我将使用该库连接到 REST 服务并将 JSON 发布到我不控制证书、API 等的服务器。

它有点工作。问题是我不清楚它是如何工作的。在 Beast 附带的示例中,它引用了一个文件example/common/root_certificates.hpp,其中包含两个 base64 格式或类似格式的证书。

当我尝试这个例子时,我让它可以使用 POST 一个 JSON 字符串到服务器,我们称之为“exampleserver.com”。连接到端口 80 和 443。即使我注释掉了它调用根证书函数的行,load_root_certificates(ctx);. 没有出现握手或其他任何错误。并且服务器响应正确。

那么,我的问题是:

1) Beast 库是从那里获得证书exampleserver.com还是我已经安装了它,这就是它起作用的原因?如果是这样,当它到期时会发生什么?我是否必须在使用我的应用程序的每个客户端上重新安装一个新的?我宁愿在我的代码中没有任何硬编码证书来检查它。证书说的DigiCert Global Root CA -> DigiCert SHA2 Secure Server CA是浏览器附带的标准证书?

2)它是否只是在端口 443 上使用了普通 HTTP(无 SSL)?不知道这是否可能......

c++ boost-asio c++11 boost-beast

5
推荐指数
1
解决办法
7730
查看次数

标签 统计

express ×2

https ×2

node.js ×2

boost-asio ×1

boost-beast ×1

c++ ×1

c++11 ×1

heroku ×1

ssl ×1