我想创建一个连接到中央远程数据库的应用程序,该应用程序旨在提供给多个用户在本地网络中的计算机上使用。我们面临的主要挑战是向用户隐藏连接字符串,以防止潜在的恶意使用。
到目前为止,我发现我必须使用那里RsaProtectedConfigurationProvider
描述的类来加密和解密它。但我不知道如何将所需的 RSA 密钥提供给客户端?以及这一切如何防止破解者找到密钥并使用它来解密? app.config
app.config
谢谢大家 ;)
我想创建一个连接到中央远程数据库的应用程序,该应用程序旨在提供给多个用户在本地网络中的计算机上使用。我们面临的主要挑战是向用户隐藏连接字符串,以防止潜在的恶意使用。
到目前为止,我发现我必须使用那里RsaProtectedConfigurationProvider
描述的类来加密和解密它。但我不知道如何将所需的 RSA 密钥提供给客户端?以及这一切如何防止破解者找到密钥并使用它来解密? app.config
app.config
谢谢大家 ;)
如果您阅读了如何:使用 MSDN 上的 RSA 加密 ASP.NET 2.0 中的配置部分的Web 场场景,您将了解如何创建密钥并从中提取私钥和公钥以安装公共键在不同的机器上。
概括:
创建自定义键:
aspnet_regiis -pc "CustomKeys" -exp
在配置文件中添加一个configProtectedData
部分,以使用自定义键
加密想要的部分
导出密钥:
aspnet_regiis -px "CustomKeys" "C:\CustomKeys.xml" -pri
复制并导入其他机器中的密钥:
aspnet_regiis -pi "CustomKeys" "C:\CustomKeys.xml"
我们面临的主要挑战是向用户隐藏连接字符串
您不能让用户拥有直接连接到数据库的客户端应用程序,并期望能够隐藏连接字符串。这是做不到的。
如果连接字符串必须保密,请将其存储在服务器上并让客户端应用程序连接到 Web 服务,而不是直接连接到数据库。
这些天我遇到了同样的问题并找到了另一个解决方案,也许不是很优雅,但它对我有用。我使用 AES 算法用我定义的密钥加密连接字符串,并替换了配置文件中的结果字符串。然后我在我的应用程序中添加了一个具有相同密钥的解密函数,并在 get connectionstring 方法中使用它,如下所示:
public string myConnectionString {
get {
return ((new Cypher().Decrypt(this["myConnectionString"].ToString())));
}
}
主要缺点是这些更改可能会在编译时被覆盖,因此最好在您的应用程序准备好时执行此操作。我使用了在这里找到的加密/解密方法: AES 加密解密(密码学)教程,在 ASP.Net 中使用 C# 和 VB.Net 的示例