2009-04-08 94 views
2

我必须在Windows服务和asp.net网站之间进行一些安全通信。在asp.net网站上,我生成一个密钥对,将我的公钥发送到我的Windows服务,然后从我的服务接收加密的消息并使用asp.net进行解密。asp.net生成没有密钥存储的RSA公钥对

第一个问题是这个。所以我必须使用RSAParams.Flags = CspProviderFlags.UseMachineKeyStore;这个user profile is not created in asp.net

这不适用于我的托管服务提供商,因为我无法访问我的机器商店。

我认为我的解决方案是在内存中生成密钥对并且从不使用密钥存储,这可能吗?

回答

2

结帐http://www.codeproject.com/KB/security/EZRSA.aspx从文章Exerpt:

“帮助我们做什么?周围的Googling的位,和快速电子邮件给我们的(优秀)的Web托管服务提供商液体六,透露了原因这就隐藏在Windows crypt API的基础上,RSACryptoServiceProvider基于Windows crypt API。基本上,为了允许脚本加载自己的私钥会危害Windows密钥库的安全性,所以所有明智的Web托管提供商都会关闭它,以免流氓脚本窃取/覆盖托管服务提供商自己的私钥,这使我成为Windows crypt API中的一个主要难题,但是你去了,我想我们一直坚持下去。还有一些谷歌搜索出现了两个基本资源:Chew Keong TAN最优秀的BigInteger类和一些LGPL'C'代码,用于从XySSL(最初由Christopher Devine编写)进行必要的计算和PKCS#1封装。这些资源对我来说特别有用,因为(a)操纵具有数百位数字的数字的能力是一个专业领域,(b)我讨厌ASN.1(构建PKCS#1格式)。计算本身看似简单。

一天或两天的拼接和修补以及EZRSA诞生了。 EZRSA几乎可以完成RSACryptoServiceProvider可以完成的所有工作,但完全在托管代码中,而不使用Windows crypt API。因此,无论您的Web托管服务提供商对您施加什么信任级别(这是我们所需的),它都可以在任何地方运行。“

希望它有帮助!