【问题标题】:node.js FS cannot read certificate from letsencrpytnode.js FS 无法从letsencrypt 读取证书
【发布时间】:2018-07-23 03:04:21
【问题描述】:
const httpsOptions = {
    key: FS.readFileSync("/etc/letsencrypt/live/site/privkey.pem"),
    cert: FS.readFileSync("/etc/letsencrypt/live/site/fullchain.pem")
};

EACCES: permission denied

尝试使用选项设置 HTTPS 服务器。在设置选项以传递给HttpS.createServer(httpsOptions,App); 时。我从letsencrypt获得了证书,但是尝试运行服务器会导致权限被拒绝错误。为 HTTPS 服务器加载证书和密钥文件的正确方法是什么?

【问题讨论】:

  • EACCES 通常意味着您正在尝试做一些只有拥有额外权限的用户才能做的事情。您试图以什么用户身份运行您的服务器?哪些用户拥有这些证书文件?您尝试在哪个端口上运行您的服务器?这个问题适用吗? Node.js EACCES error when listening on most ports.
  • @zero298 端口 3200,问题是节点不会读取我的证书文件,因为我试图将其作为 HTTPS 服务器而不是普通 HTTP 服务器运行
  • @zero298 刚刚尝试像往常一样使用nodemon server.js 运行服务器。这适用于 HTTP,但是一旦我尝试运行 httpsOptions 命令,就会出现错误。我需要从其他文件位置访问证书吗?

标签: node.js https lets-encrypt


【解决方案1】:

证书没有正确的权限。

sudo chmod 755 /etc/letsencrypt/live/

试试这个。希望有效

【讨论】:

  • 认为这可能起到了作用,但不是 100% 确定,因为我做了一些其他配置更改,但这可能会有所帮助。
  • 就我而言,目录内的证书需要有644个权限(其他用户的读取权限)。因为我的 nodejs 服务器是在普通用户下运行的。
【解决方案2】:

@Wesgur 的回答对我没有帮助,有什么帮助是:

sudo chown $(whoami) /etc/letsencrypt/live/ -R
sudo chown $(whoami) /etc/letsencrypt/archive/ -R

可能与 live 目录中的 .pem 文件是指向 archive 目录中实际证书和私钥文件的符号链接这一事实有关...

【讨论】:

  • 您好,感谢您的回答 $(whoami) 和 -R 是做什么的?
  • $(whoami) 是一个占位符,将 $(whoami) 替换为当前的 SSH 用户名。此外,-R 用于递归更改所有者。
【解决方案3】:

对于那些有这个问题的人,让我们加密:

  • 在测试时,只需使用 sudo 启动服务器...例如sudo node index.js
  • 对于生产,使其作为由具有 sudo 权限的用户启动的守护程序运行

这样您就不必搞乱文件权限或所有权

【讨论】:

  • 虽然这可行,但如果攻击者通过 ACE 获得了对脚本的控制权,那么他们也将拥有对整个文件系统的所有权限的访问权限。代码只能以它需要的选择权限运行,所以这个答案是不安全的。
  • 这就是我没有走这条路的原因。
猜你喜欢
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
相关资源
最近更新 更多