用于Web服务安全的SSL加密JSON字符串



我有一个场景,用户通过ASMX Web服务将事务日志上传到主服务器。该应用程序是clickonce.Net winforms应用程序

目前我正在做这件事,将对象列表转换为Json,并在服务上反序列化它。通过SSL。

string data = JsonConvert.SerializeObject(Values_Static.logitems);

我的代码受SmartAssembly保护。尽管如此,我还是遇到了一些漏洞,攻击者可以访问网络连接,并可以对数据进行解密。

现在我想到了一个场景,我用一些私有字符串密钥加密Json字符串,然后在服务器上对其进行解密。

例如

private string salt = "$e7?8f@l4";
return ByteArrToString(Encrypt(TextValue + salt)); 

在应用程序中对密钥进行硬编码,并在服务器中对其进行解码。

它行得通吗?用户每分钟都会将日志上传到服务器,每次上传可能有20-30个条目。有没有数据被破坏或黑客入侵的可能性?

更新:根据以下讨论。我知道我的代码有一些问题。代码正在接受无效证书。如何防止仅接受来自https://Web服务的有效证书。ATM,每个人都可以通过加密HTTPS上的fiddler看到代码。

我的IIS 7上安装了有效的证书。并且工作正常问题出在代码上。以及在Visual Studio中自动生成的标准web引用。

更新2:最终的结果是,Post数据不是加密的,它是纯XML的,任何可以嗅探的软件都可以读取,但是GET数据是安全的。我有点犹豫,找不到有效的答案

您使用SSL吗?如果是,则任何应用程序级别的加密都是多余的。而且,密钥必须嵌入代码中,因此任何攻击者都可以读取。

Fiddler(或其他HTTPS代理)可以解密任何HTTPS流量。

您可以通过在客户端代码中要求特定的服务器证书(而不是信任系统本身信任的任何证书)来防止Fiddler的简单使用。然而,这只是一个微弱的威慑,因为用户可以反编译你的代码并对其进行更改,这样你的新证书检查就会被取消。

这被称为"不受信任的客户端"问题,正是这一问题使数字版权管理(DRM)软件成为"尽最大努力"的事务,而不是铁一般的保护。

最新更新