【问题标题】:Setting up multiple HTTPS servers listening on the same port in Node在 Node 中设置多个监听同一端口的 HTTPS 服务器
【发布时间】:2016-01-31 04:06:40
【问题描述】:

如果不指定协议,以下块将导致使用 TLS 1.2 的 HTTPS 服务器:

var options = {
    key: fs.readFileSync("security/server.key"),
    cert: fs.readFileSync("security/server.crt")
};
https.createServer(options, app).listen(443);

但是,我的一个端点需要充当 Fitbit API 的订阅者端点,这需要 TLS 1.0。为此,我需要将secureProtocol 设置为TLSv1_method

var options = {
    key: fs.readFileSync("security/server.key"),
    cert: fs.readFileSync("security/server.crt"),
    secureProtocol: "TLSv1_method" // Fitbit subscription API requires TLS 1.0
};
https.createServer(options, app).listen(443);

将 TLS 1.0 用于一个端点,将 TLS 1.2 用于所有其他端点的最佳方式是什么?答案可能在http-proxy 模块中,但我很难将文档应用到我的用例中。请注意,我使用不同的子域来区分流量。

【问题讨论】:

    标签: node.js express https node-http-proxy


    【解决方案1】:

    如果选项中未定义secureProtocol,则默认情况下,节点将创建一个接受 TLS 1.0、TLS 1.1 和 TLS 1.2 上的连接的 https 服务器。


    示例服务器:

    const https = require('https');
    const fs = require('fs');
    
    const options = {
      key: fs.readFileSync('default-key.pem'),
      cert: fs.readFileSync('default-cert.pem')
    };
    
    https.createServer(options, (req, res) => {
      res.writeHead(200);
      res.end('hello world\n');
    }).listen(8000);
    

    你可以在命令行用 curl 测试一下:

    测试 SSLv3(将失败,默认禁用):

    curl --sslv3 https://localhost:8000 -k
    

    测试 TLSv1(将起作用):

    curl --tlsv1.0 https://localhost:8000 -k
    

    测试 TLSv1.1(将起作用):

    curl --tlsv1.1 https://localhost:8000 -k
    

    测试 TLSv1.2(将起作用):

    curl --tlsv1.2 https://localhost:8000 -k
    

    在 node.js 版本 5.3.0 和 5.5.0(最新稳定版)上测试。

    【讨论】:

    • 啊...我没有意识到默认支持所有三个版本。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-03-11
    • 2014-04-19
    • 2018-06-15
    • 2011-05-20
    • 2021-07-10
    • 1970-01-01
    • 2020-11-28
    • 2017-03-30
    相关资源
    最近更新 更多