C# 是否可以仅从已知客户端强制执行web服务调用?

C# 是否可以仅从已知客户端强制执行web服务调用?,c#,.net,web-services,security,encryption-asymmetric,C#,.net,Web Services,Security,Encryption Asymmetric,情景: 我完全控制的公开可用的Web服务。 但是我只希望这个特定的桌面应用程序(我发布的应用程序)能够访问Web服务。 我可以在桌面客户端中存储一个秘密密码,但这很容易破解 是否有任何已知的实现强制执行此操作? PKI,非对称密钥?提供X509加密 该实现的一部分包括仅向特定客户机提供生成的公钥的可能性。这样,只有您选择的客户端才能连接到该服务。提供X509加密 该实现的一部分包括仅向特定客户机提供生成的公钥的可能性。这样,只有您选定的客户端才能连接到该服务。如果公众可以访问该桌面应用程序的副本

情景:

我完全控制的公开可用的Web服务。 但是我只希望这个特定的桌面应用程序(我发布的应用程序)能够访问Web服务。 我可以在桌面客户端中存储一个秘密密码,但这很容易破解

是否有任何已知的实现强制执行此操作? PKI,非对称密钥?

提供X509加密

该实现的一部分包括仅向特定客户机提供生成的公钥的可能性。这样,只有您选择的客户端才能连接到该服务。

提供X509加密


该实现的一部分包括仅向特定客户机提供生成的公钥的可能性。这样,只有您选定的客户端才能连接到该服务。

如果公众可以访问该桌面应用程序的副本,任何好的反向器都可以破解该应用程序并“模拟”其与服务器的交易。无论你的加密技术有多安全,你的应用程序加密/解密数据所需的一切都包含在二进制文件中,所以破解程序只需要从中挖掘出来

密码学的目标是在数据传输过程中保护数据免受“中间人”黑客的攻击,但如果您可以访问任何一个对等方,您可以轻松地破解它

您的服务器决不能信任来自客户端的内容

[继续编辑]

尽管你不能百分之百地保证你的服务器的一个假定客户端是或不是你的应用程序或30年代制造的一些“模拟器”,但你可以让他们复杂化。游戏反作弊中的一种常见做法是,有时随机地让客户端应用程序成为一个技巧性问题,如“从偏移量a到偏移量B的main.exe哈希是多少?”或“从现在开始,数据包类型0x07与数据包类型0x5f交换”。一旦检测到假冒,服务器将进入“愚蠢模式”,表现出故障,并将其IP/帐户列入该模式的黑名单数小时,这样他们就无法确定自己的程序做错了什么


如果您检测到有人正在构建仿真器,请让他们重新开始:混淆数据包类型表、加密表、更改某些数据包格式并强制客户端更新。你不会看到饼干打扰你一段时间。。。LOL

如果公众可以访问此桌面应用程序的副本,任何好的反向器都可以破解它并“模拟”它与服务器的交易。无论你的加密技术有多安全,你的应用程序加密/解密数据所需的一切都包含在二进制文件中,所以破解程序只需要从中挖掘出来

密码学的目标是在数据传输过程中保护数据免受“中间人”黑客的攻击,但如果您可以访问任何一个对等方,您可以轻松地破解它

您的服务器决不能信任来自客户端的内容

[继续编辑]

尽管你不能百分之百地保证你的服务器的一个假定客户端是或不是你的应用程序或30年代制造的一些“模拟器”,但你可以让他们复杂化。游戏反作弊中的一种常见做法是,有时随机地让客户端应用程序成为一个技巧性问题,如“从偏移量a到偏移量B的main.exe哈希是多少?”或“从现在开始,数据包类型0x07与数据包类型0x5f交换”。一旦检测到假冒,服务器将进入“愚蠢模式”,表现出故障,并将其IP/帐户列入该模式的黑名单数小时,这样他们就无法确定自己的程序做错了什么


如果您检测到有人正在构建仿真器,请让他们重新开始:混淆数据包类型表、加密表、更改某些数据包格式并强制客户端更新。你不会看到饼干打扰你一段时间。。。LOL

最简单的方法是使用客户端和服务器证书进行消息安全。最好的方法是在服务器机器中导入客户端证书,并在app.config文件中硬编码客户端证书指纹。另一种方法是协商证书,我以前从未尝试过

如果您使用IIS托管服务,则使用SSL的客户端证书是另一种选择


MSDN链接打开。

最简单的方法是使用客户端和服务器证书进行消息安全。最好的方法是在服务器机器中导入客户端证书,并在app.config文件中硬编码客户端证书指纹。另一种方法是协商证书,我以前从未尝试过

如果您使用IIS托管服务,则使用SSL的客户端证书是另一种选择


MSDN链接打开。

一件事是加密,另一件事是身份验证。公钥/私钥的作用是仅接受来自具有(部分)密钥的客户端的连接。客户端用于身份验证的密钥不得嵌入二进制文件中。所以你的观点只是部分正确和不相关。您可以将客户端分发到整个Internet,但密钥只能分发到少数几个。二进制文件中的任何内容都不会告诉您如何成功连接,它只会告诉您需要一个密钥。是的,这与分发帐户或注册密钥一样,您可以随时阻止使用该服务。这的确是个好主意,但不是问题所在。他希望只有他的应用程序(而不是他的“授权人员”)可以访问该服务。它是有点可互换的,所有有效的应用程序实例都有密钥(即,应用程序所有者是授权人员)。尽管人们仍然可以窃取密钥,但这取决于特定的用例,一个密钥可能就足够了。一个是加密,另一个是身份验证。公钥/私钥的作用是仅接受来自具有(部分)密钥的客户端的连接。客户端用于身份验证的密钥不得嵌入二进制文件中。所以你的观点只是部分正确和不相关。您可以将客户端分发到整个Internet,但密钥仅限于选定的f