2015-07-20 118 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