2016-07-24 113 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

它們是您操作系統中的文件。您可以將這些文件移至相應的目錄。如果你將它們用於你的https服務器,你可能不會將它們用於其他事情。或者將他們放在更好的共享位置,以便所有需要訪問的人都可以訪問。 – jfriend00

回答

3

我得到了我的代碼訪問權限。

我做什麼

  1. 創建新的用戶組名爲certAccess
  2. 添加自己certAccesssudo useradd ec2-user -G certAccess
  3. 添加root用戶(誰能夠訪問這些文件的唯一用戶) certAccess
  4. 更改了私鑰的所有者:sudo chown ec2-user.certAccess /etc/pki/tls/private/serverKey.key

測試...

爲了測試,我只需打印options到控制檯,使用它之後。事實上,我看到了私鑰和證書的內容(自己嘗試)。我也重啓httpd服務器,並請求靜態文件。我看到他們,用TLS保護,沒有錯。

1

問題是這些證書只能由root(也可能是其他用戶)讀取。

您可以使用chmod爲所有用戶提供讀訪問權限,但這意味着......所有用戶都可以訪問它。所以,糟糕的主意。

另一種解決方案是將這些文件的chown這兩個文件傳遞給運行node.js的用戶,但是如果已經有一個用戶使用這些文件的應用程序,它將會破壞它。在這種情況下,創建一個擁有該文件的新組,爲該組授予讀取權限,並添加應訪問該組中文件的用戶。

+0

如何做到這一點?例如,如何創建組? –

+0

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

+0

我創建了組訪問證書(在服務器的指定目錄中)。現在如何更改組訪問權限?我希望能夠擁有SSL/TLS,無論我的node.js代碼是否正在運行 –