我尝试按节点使用SSL。js,但它不工作,因为权限被拒绝
。
try {
var TLSoptions = {
key: fs.readFileSync("/etc/letsencrypt/live/domain.work/privkey.pem"),
cert: fs.readFileSync("/etc/letsencrypt/live/domain.work/cert.pem")
};
https.createServer(TLSoptions, app).listen(port, host, function() {
console.log("TLS Website started.")
}); catch(e) {
console.log(e)
}
=
{ Error: EACCES: permission denied, open '/etc/letsencrypt/live/domain.work/privkey.pem'
at Object.fs.openSync (fs.js:663:18)
... (Librarys dump)
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/etc/letsencrypt/live/domain.work/privkey.pem' }
所以我试着重新制作*的文件。佩姆。
rm -f /etc/letsencrypt/live
rm -f /etc/letsencrypt/archive
rm -f /etc/letsencrypt/renewal
sudo ./letsencrypt-auto certonly -a standalone -d domain.work
并检查文件权限。
/etc/letsencrypt/live/domain.work$ ls -lsa
total 12
4 drwxr-xr-x 2 root root 4096 Jan 3 21:56 .
4 drwx------ 3 root root 4096 Jan 3 21:56 ..
0 lrwxrwxrwx 1 root root 37 Jan 3 21:56 cert.pem ->
../../archive/domain.work/cert1.pem
0 lrwxrwxrwx 1 root root 38 Jan 3 21:56 chain.pem ->
../../archive/domain.work/chain1.pem
0 lrwxrwxrwx 1 root root 42 Jan 3 21:56 fullchain.pem ->
../../archive/domain.work/fullchain1.pem
0 lrwxrwxrwx 1 root root 40 Jan 3 21:56 privkey.pem ->
../../archive/domain.work/privkey1.pem
/etc/letsencrypt/archive/domain.work$ ls -lsa
total 24
4 drwxr-xr-x 2 root root 4096 Jan 3 21:56 .
4 drwx------ 3 root root 4096 Jan 3 21:56 ..
4 -rw-r--r-- 1 root root 1789 Jan 3 21:56 cert1.pem
4 -rw-r--r-- 1 root root 1647 Jan 3 21:56 chain1.pem
4 -rw-r--r-- 1 root root 3436 Jan 3 21:56 fullchain1.pem
4 -rw-r--r-- 1 root root 1708 Jan 3 21:56 privkey1.pem
但是它没有解决,我也找不到任何错误和问题
如何解决这个问题?
这对我很有用:
sudo cp /etc/letsencrypt/live/www.your-domain.com/privkey.pem /home/your-username/your-server-directory/privkey.pem
.createServer(
{
key: fs.readFileSync("privkey.pem"),
cert: fs.readFileSync("cert.pem"),
},
sudo chown您的用户名-R privkey。pem
我不熟悉Node。js,但这显然是与PostgreSQL相同的权限问题。因此,同样的解决方案应该很有效。这允许您保留/etc/letsencrypt
上的权限:
您可以在/etc/letsencrypt/renewal hooks/deploy
中使用一个脚本来执行此操作,每次续订证书时都会调用该脚本。
示例/etc/letsencrypt/renewal hooks/deploy/10 certbot复制证书
:
#!/bin/bash
domain=domain.work # using your example name
node_dir=/path/to/cert_copies
node_user=nodeuser
cp /etc/letsencrypt/live/$domain/{fullchain,privkey}.pem "$node_dir"/
chown $node_user "$node_dir"/*.pem
当您使用sudo颁发证书时,它们将归root所有。由于节点不作为根用户运行,并且证书文件夹上的权限不允许除所有者之外的任何人打开它们,因此节点应用无法看到它们。
为了理解解决方案,让我们假设节点作为用户nodeuser
运行
您可以使用以下命令在ubuntu上获取用户:whoami
或ps aux|grep node
解决方案#1(临时):
您可以将证书的所有者切换到您的节点用户。$sudo chown nodeuser-R /etc/letsencrypt
然而,这可能会破坏查看证书的任何其他项,例如Nginx或
它也只会持续到下一次更新,也就是不超过90天。另一方面,任何更新证书的脚本也可以设置所有者。
解决方案2(不要这样做):
以root用户身份运行节点sudo节点索引。js
这将以root用户的身份运行node,这意味着node极不安全的表面可以访问系统上的所有内容。请不要这样做。
解决方案3(也不要这样做):
向所有人打开证书
证书存储在/etc/letsencrypt/archive/${domain}/cert1中。pem
,并链接到from/etc/letsencrypt/live/${domain}/cert1。pem
。
这两个路径中的所有文件夹都是x,这意味着系统上的所有用户都可以打开文件夹,除了“实时”和“存档”文件夹本身。
您也可以通过更改它们的权限来打开它们。
$ sudo chmod +x /etc/letsencrypt/live
$ sudo chmod +x /etc/letsencrypt/archive
这是不好的,因为它允许从其他意外来源进行访问。一般来说,向所有人打开文件夹是个坏主意。
解决方案#4(这样做):
另一方面,您可以创建一个有限的组,并允许仅为它们打开权限。
// Create group with root and nodeuser as members
$ sudo addgroup nodecert
$ sudo adduser nodeuser nodecert
$ sudo adduser root nodecert
// Make the relevant letsencrypt folders owned by said group.
$ sudo chgrp -R nodecert /etc/letsencrypt/live
$ sudo chgrp -R nodecert /etc/letsencrypt/archive
// Allow group to open relevant folders
$ sudo chmod -R 750 /etc/letsencrypt/live
$ sudo chmod -R 750 /etc/letsencrypt/archive
这应该允许节点使用证书访问文件夹,同时不向任何人开放。
然后,您应该重新启动,或者至少在这些更改之后注销和登录
(对权限和组的许多更改都需要新的会话,在重新启动之前,PM2一直存在问题。)
在ec2实例中,您可以执行sudo restart
。
如果出现问题,您希望恢复到原始设置,请遵循以下步骤
// Delete Group
$ sudo groupdel nodecert
// Reset Permission
$ sudo chown -R :root /etc/letsencrypt/live
$ sudo chown -R :root /etc/letsencrypt/archive
// Check Permissions
$ sudo ll /etc/letsencrypt/
我正在使用下面常用的库进行加密。我想从Mcrypt将其升级到OpenSSL,这样我就不再使用已弃用的库。 我试图找出这是否可能。我对此做了一些研究,但我发现了相互矛盾的信息: 这篇文章说不可能用OpenSSL解密用Mcrypt加密的数据。https://stackoverflow.com/a/19748494/5834657 但是,这篇文章说可以使用填充。我的函数似乎使用了填充。这是使其工作所需的
我做过多次使用Git时如何解决权限拒绝(公钥)错误? 可以解决这个问题。但是当我重新打开git bash时,我必须重新做所有事情。我如何避免这种无聊的操作?
我从Let's Encrypt获得了有效的https证书,但将其提供给vert时存在信任问题。x版本3.6.2 我用apache测试了cert,没问题,但是如果我试图用wget到达https vert. x服务器实例,我会得到: $wgethttps://www.myhost.mydomain/json/read/all-languages -2019-01-22 10:30:56--https:
问题内容: 当尝试在CentOS上使用Apache 2.2和PHP 5.3配置上传目录时,我一直收到此错误。 在php.ini中: 在httpd.conf中: CentOS目录权限: 无论我做什么,在上传文件时,都会不断从PHP收到此错误: 警告:move_uploaded_file(images / robot.jpg):无法打开流:在第78行的/var/www/html/mysite/proc
我已经创建了一个自定义内容提供者,它将被更多的应用程序访问。我已经在我的提供者AndroidManifest中包含了权限标记。xml文件,在第二个应用程序中,我包含了uses-permissions标记,但没有成功。Logcat向我展示: 我也搜索过类似的问题,但似乎一切都是正确的。有什么想法吗?谢谢 这是我的提供者AndroidManifest。xml文件: 这是我的第二个应用程序Android
并且在清单中权限集是正确的