C#Web服务中的加密


16

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

我正在调查WSE 3.0,但似乎微软放弃了对它的支持,因此它不是直接使用。
看来WCF可能是一个选项,但我不想从.NET 2.0升级。

任何简单,直截了当的加密方法?

8

我认为这可以帮助;去年我们用这个来压缩webservices,它表现得非常好,我相信它可以通过加密类来增强;

Creating Custom SOAP Extensions - Compression Extension


0

也许我很天真,但会强迫通过https通信是可以接受的? 我开发的Web服务可以在2.0上运行,并且只需让IIS在虚拟目录上强制执行https即可获得成功。

或者,或者另外,您可以检查HttpRequest.IsSecureConnection property


1

也许我太天真,但会迫使 通信是通过HTTPS 是可以接受的?我开发web 在2.0上运行的服务,并有 成功,只需让IIS到 在虚拟 目录中强制执行https。

这将是去 可能是最简单的方式,但不幸的是我没有 拥有控制权的IIS 配置,并不能保证 ,它可以运行HTTPS。

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


0

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

它工作得很好。但是,这种方法绝非“简单”。


2

您所做的任何提供不使用SSL/TLS的“加密”都可能是脆弱的。现在你必须问自己,值得花费开发时间来开发橡皮鸡安全措施的功能吗?也许是。

.NET API(如DPAPI和Win32 crypt32 API)可以很容易地使用静态密钥来加密数据斑点。但您的客户如何获得钥匙?任何已安装的SOAP客户端必须将密钥烧入其配置中,或通过不安全的Internet接收密钥。

这是SSL/TLS为您解决的问题;您使用TLS证书进行的舞蹈解决了通过不受信任的渠道传输公钥的问题。


0

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

加密您的参数并解密它们会更困难但更安全。

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

我使用这个形式给出了一个OTP(一次性密码)的Web服务,它为我工作得很好。