gpt4 book ai didi

没有证书和 Windows 身份验证的 WCF 消息安全性

转载 作者:行者123 更新时间:2023-12-03 14:01:16 26 4
gpt4 key购买 nike

我有一个 WCF 服务和客户端,它将被部署到几家公司(数百家)。一些公司将在其网络中运行该软件,而一些公司将通过 Internet 运行它(WCF 服务器在办公室,WCF 客户端在另一个)。

我们要加密 WCF 服务器和客户端之间的通信。我们不需要使用 WCF 安全性对 cient/订阅者进行身份验证,因为我们有自己的用户名/密码登录,客户端将使用该用户名/密码登录服务器。

  • 我们不能依赖 Windows 身份验证,因为一些用户将通过 Internet 运行它,而且 WCF 服务器可能与 WCF 客户端不在同一个域中。
  • 如果我们使用“真正的”证书*,运行该软件的公司将不得不从 CA 购买证书并安装它,然后配置我们的软件以使用它,但这对大多数人来说太复杂了。
  • 我们可以在安装 WCF 服务器的过程中自动创建证书,但是我们必须自动将其安装到证书存储中,并以某种方式自动授予 IIS 读取证书的权限。这比我们想要的要复杂。

  • 简而言之,我们想要一个简单的解决方案,其中加密仅基于共享 key ,在我们的例子中是用户登录时使用的用户名/密码。我明白这不会提供最好的可用加密,但我们愿意交换一些安全性以使软件更易于部署。

    这可能吗?

    *对于“真实”证书,我指的是从证书颁发机构购买的证书,而不是我自己创建/自签名的证书。

    最佳答案

    如果你想加密传输中的消息(这是一个非常好的主意!),发送者(客户端)和服务器之间必须有一些共享的知识。这可以是硬编码的,但这根本不是一个好主意——如果“共同共享”的知识被泄露,攻击者可以破译并阅读你的所有消息。

    另外,因为它肯定是 不是 推荐的做法,WCF 中没有任何类型的支持来简化共享 key 的使用。你是靠自己的——你必须100%自己动手。

    唯一可行的方法以安全的方式交换公共(public)共享 secret 就是使用证书。没办法,抱歉。证书甚至不必用于用户身份验证或其他任何事情 - 但它在调用者和服务之间建立了一个共享 secret ,因此允许调用者以只有预期接收者才能实际解密和使用的方式加密消息他们。

    所以我真的看不出有什么办法可以让你的服务器上拥有证书——不需要在每个客户端上,而是在你的服务运行的每台服务器上。

    马克

    PS:如果你真的想研究“硬编码共享 key ”的方法,你需要考虑这个:

  • 您如何在每个客户上安全地存储共享 secret ?
  • 您如何使用存储的共享 key 中的信息来加密您的消息?

  • 通常,该方法有两个方面:
  • 交换某种形式的私钥/公钥对;服务器生成一个 key 对并将私钥保存给自己并与客户端共享公钥(例如,通过 WCF 消息)
  • 使用该私钥/公钥对,交换一个共同的共享 secret ,例如对称加密消息的“加密 key ”(由于它是对称的,服务器可以使用相同的 key 来解密消息)
  • 在您的客户端上设置基础架构(例如,称为行为的 WCF 扩展)以在消息发出之前检查消息并使用您的共享 key
  • 对其进行加密

    总而言之,这真的不是微不足道的——任何比这更简单的东西都不值得被称为“安全”。

    如果你看看你必须做的所有工作 - 使用 WCF 内置证书机制不是更容易吗?

    体面的安全值得它的盐 很难 - 所以为什么不利用可用的东西而不是自己做所有的工作,或者更糟:想出一个很容易破解的半生不熟的解决方案,你可以很容易地以明文形式发送所有内容......不要在估计处理最基本的安全方案所需的复杂性和代码量 - WCF 为您完成这一切 - 免费且以可靠和安全的方式 - 使用它!你不会后悔的!

    关于没有证书和 Windows 身份验证的 WCF 消息安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1570939/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com