我在 Heroku 上有一个使用付费测功机的应用程序,因此使用他们的 ACM 自动证书管理
这应确保客户端和应用之间的所有流量都已加密。
但是,我的应用会标注到单独的专用 API。我正在等待一个单独的自签名证书,以便能够连接到此 API(因此这应该全部与 Heroku 证书分开(。作为临时解决方法..与此 API 的所有连接当前都与
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
我已经阅读了有关此内容的危险以及如何使所有节点未加密的信息。我的问题是,当客户端连接到 Heroku 实例以获取不涉及 API 标注的应用程序的其他部分时,应用程序是否仍然安全。还是设置该 env var 真的会使整个应用程序不安全,无论 Heroku 证书如何?
谢谢!
如果我理解正确,您同时具有传入和传出连接,并且您与 API 的出站连接正在使用NODE_TLS_REJECT_UNAUTHORIZED
.
Clients --in--> Your Application --out--> API
您的应用程序入站客户端连接仍将是绿色且安全的,但您与 API 的出站连接仍然容易受到攻击。
就像链条一样,它的强度取决于它最薄弱的环节。 因此,如果有人攻击您与 API 的出站连接,他们可以接收所有数据。
您有两种方法可以解决此问题:
- 获取 API 的"真实"证书。
- "预授权"自签名 API 证书。
您可以下载自签名证书的公钥并将其存储在 NodeJS 应用程序中。然后,在您的请求中,只需添加:
ca: [fs.readFileSync([certificate path], {encoding: 'utf-8'})]
此解决方案允许您指定所需的 CA 证书。确保证书的公用名与您在请求中调用的地址相同(在主机中指定(:
var req = https.request({
host: '192.168.1.1',
port: 443,
path: '/',
ca: [fs.readFileSync([certificate path], {encoding: 'utf-8'})],
method: 'GET',
rejectUnauthorized: true,
requestCert: true,
agent: false
},
这种方法比盲目设置"接受所有未知的人"要安全得多。 这种方式是在说"约翰没有认证,但我认识约翰,那就是约翰。只要接受约翰。