【问题标题】:NodeJS : How to serve securely without exposing certificat contentNodeJS:如何在不暴露证书内容的情况下安全地提供服务
【发布时间】:2021-05-07 13:04:58
【问题描述】:

有没有办法在不暴露证书内容的情况下使用节点传递安全内容(https:443)?

import express from 'express'
import fs from 'fs'
import https from 'https'

const app:express.Express = express()

const options: https.ServerOptions = {
  key: fs.readFileSync('/etc/ssl/private/my.private.key'),
  cert: fs.readFileSync('/etc/ssl/certs/my.public.crt')
}

const httpsServer:https.Server = https.createServer(options, app)
[ code here ]
httpsServer.listen(443);

这可行,但我的网络应用程序必须以 root 用户身份运行,我认为这是一个坏主意。此外,我的证书内容,尤其是我的私钥,会在网络环境中公开。

有没有办法在当前节点执行上下文之外管道加密和解密过程?类似于 php/apache 模式:Apache 处理 ecrypt/decrypt 过程并以 www-data 用户身份执行 php 脚本。 php 脚本无法读取证书内容,这意味着它们是 100% 安全的,并且无法从 php 上下文中访问。

我知道我们可以设置一个 apache 层来代理安全内容 (https) 到本地不安全内容 (http),以便节点可以处理它。但这增加了相当大的复杂性。任何人都有只使用节点的更安全的方法吗?就像使用“第三方应用程序”一样,它本质上会使用提供的证书路径对内容进行编码/解码,以 ssl-cert 用户身份运行?

【问题讨论】:

    标签: node.js express ssl https


    【解决方案1】:

    我不太明白这如何保护私钥,但可以这么说。

    您还可以使用 Nginx over Express 来“保护”私钥。

    一般情况下,最多 1000 的所有端口都只能由 root 用户访问,如果没有 root 权限,您实际上无法在那里运行任何东西。

    【讨论】:

    • 假设我以“www-data”用户的身份放弃了对我的服务器的 ssh 访问权限:任何人都不能妥协任何事情。 Apache 在这个宝贵的“受保护的上下文”下运行(并且可以监听 80 和 443 端口)。这就是为什么我声明我的私钥在 apache 下是 100% 安全的,无论出现什么问题。如果我提供 root ssh 访问权限,我必须做些什么才能使提供的示例正常工作,这会使我的漏洞服务器受到威胁:/
    • @Simmoniz 1. 不要以 root 身份通过 ssh 登录,2. 使用灵活的 sudo 实用程序。 3. ??? 4. 利润!
    猜你喜欢
    • 2010-09-14
    • 2010-10-26
    • 1970-01-01
    • 2016-05-02
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多