2016-07-24 4 views
3

Node.js 앱에서 HTTPS를 사용하려고합니다. 이미 다른 용도로 사용할 수있는 것과 같습니다. 키와 인증서가 이미 설치되어 있지만 앱에서 해당 키를 가리킬 때 Error: EACCES, permission denied이 표시됩니다. Node.js에 인증서/개인 키 액세스

은 모두 키와 인증서가 /etc/pki/tls의 하위 폴더에, 나는 다음과 같이 그들을 가리키는 시도 :

var privateKey = fs.readFileSync('/etc/pki/tls/private/serverKey.key').toString(), 
    certificate = fs.readFileSync('/etc/pki/tls/certs/2_mikewarren.me.crt').toString(); 

var options = { 
    key: privateKey, 
    cert: certificate 
} 

내가 (chown를 통해) 키와 인증서의 사용 권한을 조정해야합니까? 그렇다면 안전하게 할 수 있습니까?

+0

node.js 코드가있는 디렉토리로 파일을 이동하지 않는 이유는 무엇입니까? node.js 프로세스에 해당 디렉토리를 읽을 수있는 권한이 있으며 디렉토리가 외부 액세스로부터 보호된다는 것을 알고 있습니까? – jfriend00

+0

@ jfriend00 복사 하시겠습니까? –

+0

그들은 당신의 OS에있는 파일입니다. 해당 파일을 적절한 디렉토리로 이동할 수 있습니다. https 서버용으로 사용하고 있다면 다른 용도로 사용하지 못했을 것입니다. 또는 액세스 권한이 필요한 모든 사람이 액세스 할 수있는 더 나은 공유 위치에 배치하십시오. – jfriend00

답변

3

내 코드에 액세스했습니다. 내가

  1. 만들어진 새 사용자 그룹 certAccess
  2. 추가 루트 사용자 (누가 그 파일에 액세스 할 수있는 유일한 사용자이었다)에 sudo useradd ec2-user -G certAccess을 말함으로써 certAccess에 자신을 추가이라 무슨 짓을

    certAccess

  3. 개인 키 소유자를 변경 함 : sudo chown ec2-user.certAccess /etc/pki/tls/private/serverKey.key

테스트 ...

은 단순히 바로 사용 후, 콘솔에 options를 인쇄, 테스트하려면. 사실, 개인 키와 인증서의 내용을 보았습니다 (직접 시도하십시오). 또한 httpd 서버를 다시 시작하고 정적 파일을 요청했습니다. 나는 그들을 보았고, TLS로 보호 받았다.

1

문제는 이러한 인증서는 루트 (그리고 다른 사용자) 만 읽을 수 있다는 것입니다.

chmod를 사용하여 모든 사용자에게 읽기 권한을 부여 할 수는 있지만 이는 모든 사용자가 모든 사용자에게 액세스 권한을 부여한다는 의미입니다. 그래서, 나쁜 생각.

다른 해결책은 이러한 파일을 node.js를 실행하는 사용자에게 chown으로 보내지 만 이미이 파일을 사용하는 응용 프로그램이있는 사용자가있는 경우 해당 파일이 손상됩니다. 이 경우 파일을 소유하고 해당 그룹에 읽기 권한을 부여하고 해당 그룹의 파일에 액세스해야하는 사용자를 추가하는 새 그룹을 만듭니다.

+0

어떻게해야합니까? 예를 들어, 그룹을 만드는 방법은? –

+0

http://linux.die.net/man/8/groupadd –

+0

(서버의 지정된 디렉토리에있는) 인증서에 액세스하기위한 그룹을 만들었습니다. 이제 그룹에 대한 액세스 권한을 변경하려면 어떻게해야합니까? 내 node.js 코드가 실행 중인지 여부에 관계없이 SSL/TLS를 가질 수 있기를 원합니다. –