2015-07-20 108 views
0

我的應用程序需要使用公鑰和私鑰組合才能創建簽名URL以從Cloudfront訪問我們的資產。我遇到的問題是如何保護此密鑰對,以便未經授權的用戶不能簡單地自行下載密鑰對,並在未經我們許可的情況下生成簽名的URL。保護網絡應用程序中的公鑰/私鑰對

我認爲是對密鑰對進行加密,但是這看起來沒有什麼用處,因爲加密密鑰必須存儲在客戶端代碼中,這在Javascript中是可見的。我想不出任何其他方式來保護那些只能使用Chrome開發工具的人的密鑰對。

有誰知道一種方法,我可以保護我的密鑰對而不必在客戶端代碼中存儲密鑰?我已經考慮過代碼混淆,但是這種技術似乎很容易解決。我正在查找是否有其他可能。

謝謝。

+0

你能解釋一下這種情況嗎?私密密鑰對組合/簽名URL是什麼意思? - 提供一個簡單的場景以及你要做的事情 –

+1

一般而言,用戶可以訪問任何存儲在客戶端(任何客戶端,無論是桌面應用程序,瀏覽器,手機上的移動應用程序等)的任何內容。不知道什麼是實際數據流,最好的辦法可能是將請求發送到服務器以執行實際的加密操作。 – mfanto

+0

@RoyiNamir公鑰和私鑰對是PEM文件。 Cloudfront簽名URL背後的基本前提是您創建了描述訪問策略的簽名字符串,使用RSA私鑰對其進行哈希處理,並使用公鑰對其進行驗證。然後將此簽名附加到URL並在Cloudfront中進行驗證。 – aeskreis

回答

0

你不需要保護你的公鑰,因爲它是公開的。

您需要在服務器上簽名,而不是在瀏覽器中籤名。

保護私鑰的最安全的方法是使用硬件安全模塊,但它們並不便宜。

下一個最好的方法是使用服務器上的訪問控制來保護它。

+0

如果這是一個愚蠢的問題,請原諒我,但是用戶不能只查看Chrome開發工具的「網絡」選項卡中提出的請求,查看我們如何從服務器獲取簽名的URL,並且只是複製該過程?例如,如果我讓一個端點接受一個URI並返回一個簽名的URL,我將如何防止任何人擊中該API來獲得簽名的URL?原諒我的無知,認爲我是一名安全新手。 – aeskreis

+0

我以前玩過他們的簽名網址。看起來像是短命的,特定於IP的URL是要走的路。像簽名(您的密鑰,真實的URL +客戶端IP地址+有效期到)。這種方式的URL只從該IP有效幾分鐘說 –

+0

正確的,問題是我的應用程序是公開的,所以IP特定的URL將無法工作。因此,服務器解決方案並不是更安全。它會保護我的私鑰,但它不會阻止用戶在未經我們許可的情況下生成已簽名的URL(事實上,它會使它更容易,因爲他們甚至不需要經歷理解簽名URL的方式放在一起,因爲它都是由服務器抽象出來的)。 – aeskreis