在负载均衡的云环境中存储非对称密钥容器

时间:2015-03-30 21:00:38

标签: c# cloud rsa elastic-beanstalk

我的任务是使用C#RSACryptoServiceProvider.SignData()方法签署一些数据。为了生成公钥和私钥,我使用了RSACryptoServiceProvider并传递了keycontainername以便安全地存储密钥。

当我运行MSDN example以使用固定的keycontainername在我的机器上生成一组公钥/私钥时,每次都会生成预期的公钥/私钥。

这在单个服务器环境中可以正常工作,但是,我们在服务器负载平衡的弹性环境中运行。如果我使用任何一台计算机上的私钥加密数据并通过RSACryptoServiceProvider存储此数据,则数据将仅存在于计算机级别。每台计算机将使用不同的密钥对数据进行签名,并且公钥的用户将无法验证签名。

有什么方法可以安全地将密钥存储在分布式环境中?

由于

1 个答案:

答案 0 :(得分:2)

有两种想法。

第一种是使用包含私钥的X509证书。您可以使用X509Certificate2类来获取具有私钥的RSACryptoServiceProvider实例。证书和私钥本身将保留在Windows证书存储中。然后,您可以通过证书存储将对私钥的访问权限限制为某些帐户。然后,您只需在需要它的每台机器/ AMI上安装证书。

您的另一个选择是使用硬件安全模块。 AWS有一个名为CloudHSM的服务,允许您在VPC内部使用网络HSM(我不知道它对Elastic Bean Stalk有多好)。 HSM供应商SafeNet IIRC允许安装指向HSM的CSP。然后,您将为RSACryptoServiceProvider提供一个CspParameters的实例,该实例接受容器和CSP名称。

HSM解决方案是最安全的,虽然更复杂,更昂贵。