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 服务中的加密的主要内容,如果未能解决你的问题,请参考以下文章