我有一个运行Ubuntu 16.04的数字海洋液滴。我跟着this guide在我的NodeJS服务器上使用HTTPS。
我使用certbot创建一个SSL证书,这意味着在这个目录/etc/letsencrypt/live/yourdomain.com/
,创建了3个文件:
所以在我的服务器代码中,我必须获取这些文件,我这样做:
// Certificate
const privateKey = fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/privkey.pem', 'utf8');
const certificate = fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/cert.pem', 'utf8');
const ca = fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/chain.pem', 'utf8');
当我尝试使用命令node server
或使用pm2 start server
运行我的服务器时,我收到以下错误消息:
{ Error: EACCES: permission denied, open '/etc/letsencrypt/live/yourdomain.com/privkey.pem'
at Object.fs.openSync (fs.js:646:18)
at Object.fs.readFileSync (fs.js:551:33)
at Object.<anonymous> (/home/myuser/mywebsite/lib/server-configurations.js:13:21)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Module.require (module.js:597:17)
at require (internal/module.js:11:18)
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/etc/letsencrypt/live/yourdomain.com/privkey.pem' }
当我尝试使用sudo node server
启动它时它确实没有任何问题。
我知道我可以更改文件的权限,但我宁愿不这样做,因为我多次阅读,最好不要更改这些文件的权限。
谢谢您的帮助 :)
你可以使用this certbot script。
More info on certbot renewals可能会有所帮助,以及此问题的其他解决方案on the Let's Encrypt forums。