【问题标题】:How to encrypt parts of a webpage with node.js如何使用 node.js 加密网页的某些部分
【发布时间】:2015-01-22 19:56:29
【问题描述】:

我正在开发一个 node.js 应用程序。它展示了我的一个朋友的艺术。除了一些一般信息和大量图片外,它还包括一个联系表格,供想要就他的工作联系他的人使用。我想加密联系页面以保护通过表单发送的个人数据,但保持页面的其余部分不加密以减少页面的加载时间。
我已经设法创建了一个 HTTPS 服务器来加密我的整个网站。但我只想为联系页面建立一个加密连接。 有谁知道如何实施?
我想到的一种解决方案是创建两个 node.js 服务器。一台 HTTP 服务器和一台 HTTPS 服务器,然后在 HTTP 服务器上运行主页,在 HTTPS 服务器上运行联系页面。然后,联系页面的链接将包括 https。类似于:“https://www.domain.com/contact”。
但不知何故,这感觉不是正确的方法,所以我希望有人有更好的解决方案。

感谢您的帮助!

【问题讨论】:

  • 只需在整个网站上使用 SSL。没有理由不这样做。
  • 通过 HTTPS 提供页面的开销可能不值得担心,并且无论如何都会定期加密整个网站,以增加 Web 的整体隐私。

标签: node.js ssl encryption https


【解决方案1】:

HTTPS 的性能不如普通 HTTP 的观念是一个需要消除的神话。

  • 在现代系统上,SSL/TLS 的开销小于 CPU 的 1%。事实上,通过 SPDY 等优化,您可能会发现 TLS 安全连接实际上比普通 HTTP 执行 更好。我愿意打赌,实际上,您不会注意到任何负面的性能差异。

  • 另一个常见的误解是浏览器不缓存通过 HTTPS 传递的资源。这是错误的。默认All browsers cache HTTPS content

  • Google now ranks all-HTTPS sites higher 比普通 HTTP。

使用所有 HTTPS 会丢失的唯一一件事是中间缓存代理,但老实说,除非您知道您网站的用户位于链接相对较慢的网络和本地缓存代理。否则,这不是一个真正的问题。

与 TLS 相关的开销可以忽略不计。没有理由不只通过 HTTPS 为您的整个网站提供服务。


通过 HTTPS 提供所有内容后,您仍应运行一个发出永久重定向的 HTTP 服务器。最简单的做法是运行一个单独的 Express 应用:

var http = express();

http.use(function(req, res){
    res.redirect(301, 'https://mydomain.com' + req.url);
});

http.listen(80);

您的 HTTPS 服务器也应该启用 HSTS

app.use(function(req, res, next) {
    res.set('Strict-Transport-Security', 'max-age=31536000');
    next();
});

【讨论】:

  • 谢谢你的详细回答。但是通过HTTPS建立连接不是因为使用了更复杂的握手吗?这也是加载时间的一部分,并且每次页面重新加载时都会发生,对吧?
  • 确实,最初的 TLS 握手会增加一些开销(最坏的情况*,额外的 2 次往返),但这只需要在每个会话中发生一次。在 HTTP keep-alives 和 SSL session resumption 之间,浏览器确实不需要在每次重新加载页面时都需要进行一次完整的握手。此外,如果您使用 SPDY,只要选项卡打开,TCP 连接就会保持打开状态。 (* - 正常的 TLS 握手是 2 次往返;False Start 可以减少所需的行程次数。)
猜你喜欢
  • 2011-12-30
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 2013-06-12
  • 2011-04-12
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
相关资源
最近更新 更多