C# Web 服务中的加密

Posted

技术标签:

【中文标题】C# Web 服务中的加密【英文标题】:Encryption in C# Web-Services 【发布时间】:2010-09-06 07:34:53 【问题描述】:

我正在寻找一种简单的方法来加密我的 C# Web 服务中的肥皂通信。

我正在研究WSE 3.0,但微软似乎放弃了对它的支持,因此使用起来并不简单。 似乎 WCF 可能是一种选择,但我不想从 .NET 2.0 升级。

任何简单、直接的加密方法?

【问题讨论】:

【参考方案1】:

我认为这会有所帮助;去年我们用它来压缩 web 服务,它的表现非常好,我相信它可以通过加密类来增强;

Creating Custom SOAP Extensions - Compression Extension

【讨论】:

【参考方案2】:

您为提供“加密”而不使用 SSL/TLS 所做的任何事情都可能容易受到攻击。现在您必须问自己,是否值得花费您可以花费在橡胶鸡安全措施功能上的开发时间?也许是吧。

.NET API (如 DPAPI 和 Win32 crypt32 API)使使用静态密钥加密数据块变得容易。但是您的客户将如何收到密钥?任何已安装的 SOAP 客户端都必须将密钥烧入其配置中,或者通过不安全的 Internet 接收它。

这是 SSL/TLS 为您解决的问题;你用 TLS 证书做的舞蹈是解决通过不受信任的渠道传递公钥的问题。

【讨论】:

【参考方案3】:

也许我太天真了,但我会 强制通信通过 https可以接受吗?我开发网络 在 2.0 上运行并拥有的服务 让 IIS 成功 在虚拟机上强制执行 https 目录。

这将是最简单的方法 可能,但不幸的是我没有 控制 IIS 配置,不能保证 它可以运行 https。

在这种情况下,也许最好的办法是逐个加密部分 SOAP 消息(毕竟,您可能不需要加密整个消息 - 只需要加密某些敏感字段?),或者您可以选择使用 HttpModule 来拦截所有消息并对内容进行操作。无论哪种情况,您都可能必须提供自定义代理。

【讨论】:

【参考方案4】:

也许我太天真了,但是强制通过 https 进行通信可以接受吗? 我开发了在 2.0 上运行的 Web 服务,并且已经成功地让 IIS 在虚拟目录上强制执行 https。

或者,您可以查看HttpRequest.IsSecureConnection property。

【讨论】:

【参考方案5】:

我们实际上在我们的 Web 服务中使用 WSE 3.0,它最初是在 WCF 之前开发的。为了安全起见,我们使用基于 SAML 令牌的系统,该系统基于 System.Security 中的 Cryptography 类构建。

效果很好。但是,这种方法绝不是“简单”的。

【讨论】:

【参考方案6】:

您可以使用 System.Security.Cryptography 扩展在 C# 中使用参数加密。

加密和解密参数会更难,但更安全。

How To: Encrypt and Decrypt Data Using a Symmetric (Rijndael) Key (C#/VB.NET)

我正在将这种方法用于 OTP(一次性密码)网络服务,它对我来说很好。

【讨论】:

以上是关于C# Web 服务中的加密的主要内容,如果未能解决你的问题,请参考以下文章

.NET 中的 RSA 加密/解密问题

.NET 中的 RSA 加密/解密问题

在 c# 中接收 web 服务中的请求?

如何从 C# 中的 XML Web 服务获取值?

解密 C# 中使用 RSA-OAEP 在 JavaScript 中加密的数据时出现 OAEP 填充错误

需要帮助从 C# 中的 Web 服务读取 xml 响应