【问题标题】:How to configure https in sails.js with .crt file如何使用 .crt 文件在sails.js 中配置https
【发布时间】:2013-11-25 09:23:07
【问题描述】:

我在 nodeJS 上运行sailsJS 并尝试设置HTTPS,但是我似乎被卡住了。我可以通过http://example.com:443 访问我的网站,但不能通过https://example.com 访问我的网站

这个问题与how to configure https in sails.js 类似,只是我没有 .pem 文件,而是我从 Media Temple 的 QuickSSL 获得的 .crt 和 .key 文件。

这就是我在 config/bootstrap.js

中的内容
module.exports.bootstrap = function (cb) {
    var fs = require('fs');
    sails.config.express.serverOptions = {
        key: fs.readFileSync('/etc/ssl/private/mysite.com.key'),
        cert: fs.readFileSync('/etc/ssl/crt/mysite.com.crt'),
        ca: [fs.readFileSync('/etc/ssl/crt/mysite.com-geotrust.crt')]
    };
    cb();
};

我在config/local.js

中设置了端口号为443

谁能指出我正确的方向?

【问题讨论】:

  • 您能否显示 local.js 以及您设置 https 服务器的位置。对我来说,您似乎在传递选项来表达。 Express 不再创建 https 服务器,它需要一个 https 服务器。

标签: node.js ssl sails.js


【解决方案1】:

我体验过您用于配置 express 的语法不适用于较新版本的sails,因此我对其进行了更新,它适用于自签名证书。我将代码移动到 local.config 文件,因为它实际上是一个环境设置......我没有尝试过的一件事是证书颁发机构。

这是我的 config.local 文件的样子:

var fs = require('fs');

module.exports = {
  express: { serverOptions : {
      key: fs.readFileSync('ssl/mysite.key'),
      cert: fs.readFileSync('ssl/mysite.com.crt')
    }
  },
  port: process.env.PORT || 443,
  environment: process.env.NODE_ENV || 'development'
};

如果这不起作用,您可能想看看一些事情:

  1. 如果您在端口 443 上运行,则需要调用“sudosails lift”
  2. 文件路径必须有效(在我的情况下,ssl 目录位于项目根目录中)
  3. 文件的文件权限必须是可读的(您的示例中的“等”通常只有 root 用户可读/可执行)

【讨论】:

  • 这为我设置了 https,但它稍后会导致 req.session.passport 未定义。 (来自谷歌护照)。你知道是什么原因造成的吗?
  • 您还需要为会话提供此功能:module.exports.express = { customMiddleware: function (app) { app.use(passport.initialize()); app.use(passport.session()); } };
【解决方案2】:

sailsJS 中 SSL 的官方文档仍在编写中,但我在 deployment page 上找到了这个。在你的 config/local.js

module.exports.port = 80;
module.exports.environment = 'production';
module.exports.ssl = {
    cert: 'path/to/cert',
    key: 'path/to/key'
};

express 和sailsJS 发生了很大变化。所以你应该尝试更新的例子。我找不到很多这方面的例子。

【讨论】:

  • 这对我不起作用。不确定这是否是因为我使用的是“geotrust”签名证书
【解决方案3】:

只是为了向其他人已经提到的内容添加一些配置选项,我想补充一点,您可以指定要像这样使用的密码(在那些不应该与 ! 一起使用的密码之前):

  express: { serverOptions : { 
    key: fs.readFileSync('ssl/key.pem'),
    cert: fs.readFileSync('ssl/cert.pem'),
    ciphers: "DHE-DSS-AES256-GCM-SHA384:DHE-DSS-AES256-SHA:AES256-GCM-SHA384:DHE-DSS-AES128-SHA:DHE-DSS-AES128-SHA256:AES256-SHA256:AES128-GCM-SHA256:!AES256-SHA",
    honorCipherOrder: true //  this is necessary to make the ciphers order matter
    }   
  }

您还可以传递节点的 tls 文档页面上所述的其他选项:http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener

【讨论】:

    【解决方案4】:

    我还发现使用 密码:“HIGH:!aNULL:!MD5:!3DES”, 会产生更好的结果,请尝试通过检查

    https://www.ssllabs.com/ssltest/analyze.html

    【讨论】:

      【解决方案5】:

      作为从 0.9 到 0.10 的更新,local.js 文件现在应该有

      ssl : {
      key: fs.readFileSync(‘server.key’),
      cert: fs.readFileSync(‘server.crt’)
      }
      

      而不是

      express : {
              serverOptions : {
                  key: fs.readFileSync('ssl/server.key'),
                  cert: fs.readFileSync('ssl/server.crt')
              }
          };
      

      【讨论】:

        猜你喜欢
        • 2013-07-19
        • 1970-01-01
        • 2014-02-14
        • 1970-01-01
        • 1970-01-01
        • 2014-11-22
        • 2015-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多