Node.js HTTPS读取SSL证书

时间:2016-06-02 16:27:54

标签: node.js ssl https

我有一个node.js HTTPS服务器设置,它使用服务器上的SSL证书来保护socket.io连接。虽然此设置有效并且客户端和服务器之间的通信成功,但节点必须以root身份运行,以便它可以读取文件,因为证书文件归root所有。

有没有一种方法可以在不使用sudo命令的情况下运行节点?

我的第一个想法是将证书文件的所有者更改为运行该命令的用户。但是,这似乎并不安全。

此外,可以更改文件的权限以允许其他用户读取文件,但是这会使证书文件的安全性降低吗?

1 个答案:

答案 0 :(得分:0)

证书文件中包含的私钥是否需要密码?如果没有,您可以添加一个。

这样,您可以让任何人都可以阅读证书文件:

$ chmod 444 /path/to/server.pem

任何人都可以从该文件中读取 public 证书/密钥 - 但他们也可以从您的HTTPS服务器上执行此操作,因此不会丢失安全性。任何人都可以获取私钥,因为他们没有密码用于解密由该密码加密的私钥。

然后,在Node.js代码中,提供密码例如

const httpsOptions = {
  cert: fs.readFileSync("/path/to/server.pem"),
  key: fs.readFileSync("/path/to/server.pem"),
  passphrase: "PasswordHere"
  ...
};

您需要确保passphrase不容易阅读(例如来自Node.js源文件的) - 私钥的安全性取决于这种情况下的密码,而不是文件系统权限。

希望这有帮助!