我有一个node.js HTTPS服务器设置,它使用服务器上的SSL证书来保护socket.io连接。虽然此设置有效并且客户端和服务器之间的通信成功,但节点必须以root身份运行,以便它可以读取文件,因为证书文件归root所有。
有没有一种方法可以在不使用sudo命令的情况下运行节点?
我的第一个想法是将证书文件的所有者更改为运行该命令的用户。但是,这似乎并不安全。
此外,可以更改文件的权限以允许其他用户读取文件,但是这会使证书文件的安全性降低吗?
答案 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源文件的) - 私钥的安全性取决于这种情况下的密码,而不是文件系统权限。
希望这有帮助!