.net - WCF 服务 - 使用用户名身份验证的证书和消息安全

标签 .net authentication wcf certificate

我正在准备创建一个 WCF 服务,我们的客户可以使用它来更新我们系统中的数据。因此,它必须通过 Internet 提供。我有一本关于 WCF 的书,我从中知道了 Message Security是在 Internet 上提供 WCF 服务时要走的路。那是因为您不应该使用传输安全性,因为它应该只在您可以保证服务和客户端之间存在点对点连接的环境中使用。我做对了吗?
所以我想结合自定义 UserName 使用 Message Security验证。我知道我必须获得证书才能实现这一目标。我们公司已经拥有用于我们网站的 SSL 证书。

  • 我可以使用相同的证书来保证 WCF 服务的消息安全吗?


  • Message Security 方式是否可以与需要 ASMX Web 服务的客户端互操作?

  • 出于测试目的,我使用 Makecert 创建了自己的证书。它工作正常,但我总是不得不将证书添加到 Trusted Persons在客户端机器上。
  • 是否可以启用 Message Security使用上述证书而不强制客户端将证书添加到 Trusted Persons手动?

  • 现在,让我们假设以下场景:

    Company Infrastructure

    ISA 服务器/防火墙后面有两个 Web 服务器。此 ISA 服务器持有 www.company.com 地址的证书。所以所有的 SSL 东西都由它处理。它还相应地将传入的请求转发到网络服务器。新创建的 WCF 服务应该在第二个 web 服务器上运行。
  • 我是否必须将证书复制到网络服务器才能使用 Message Security ?

  • 如果是,我听说复制证书不是一个好习惯,因为它降低了安全级别。将证书移动到网络服务器不是一种选择,因为 Web-Server1 上的网站也需要它。
  • 在这种情况下我有哪些选择?

  • 和:
  • 无论给定的要求如何,此场景的最佳实践是什么?

  • 谢谢...

    最佳答案

    精心准备的问题。首先,我可能读过同一本书,我想澄清一下这个说法:

    That is because you shouldn't use the transport security because it should only be used in environments where you can guarantee that there is a point-to-point connection between service and client.



    是的。 HTTPS(传输安全)仅提供点对点安全,但 IMO 人员无法正确理解这种情况。你认为如果你通过 HTTPs 连接到你的网上银行,它会在互联网中间的某个地方随机从 HTTPS 交换通信到 HTTP 吗?不!点对点连接意味着客户端和提供所请求 URL 的访问网关之间的安全传输 channel 。在您的方案中,它意味着客户端和您的 ISA 服务器之间的安全传输 channel 。您的 ISA 和 Web 服务器 2 之间的通信将不会受到保护。如果您想要在客户端和 Web 服务器 2 之间提供安全 channel 的端到端(ISA 将无法拦截消息),您需要消息安全性。

    现在回答你的其他问题:

    Can I use the same certificate for the message security of the WCF Service?



    是的,您可以,但您必须将私钥复制到您的 Web Server 2。

    Is the Message Security way interoperable with clients that expect a ASMX Webservice?



    不可以。除非您编写大量自定义 SOAP header 和扩展或安装 WSE 3.0,否则纯 ASMX 客户端无法使用消息安全性。

    Is it possible to enable the Message Security with the above mentioned certificate without forcing the client to add the certificate to the Trusted Persons manually?



    是的,但发布证书的证书颁发机构必须在客户端机器上受信任。这与 HTTPS 相同。受消息安全保护的服务也可以在 WSDL 中公开证书的指纹。客户端可以使用此指纹验证服务身份。我认为在这种情况下,您也不需要在客户端上安装证书,但是当证书过期时,所有客户端都必须更新。

    Do I have to copy the certificate to the webserver to be able to use the Message Security?



    是的,你必须。但这可能是一个问题,因为出于安全原因,证书可以标记为不可导出。最好的解决方案是为此目的申请新证书。

    关于.net - WCF 服务 - 使用用户名身份验证的证书和消息安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4679235/

    相关文章:

    wcf - 如何安全地将新密码发送到服务器

    c# - 使用自定义 header : This OperationContextScope is being disposed out of order 的异步 WCF 客户端调用

    c# - 是什么让 ADO.NET Entity Framework 与市场上的其他 ORM 不同?

    c# - 使用 async/await 锁定资源

    .net - 不受 ClearType 全局设置影响的 WinForm 应用程序

    ruby-on-rails - 扩展 Devise SessionsController 以使用 JSON 进行身份验证

    reactjs - 在 react-admin 中未经身份验证时,如何防止仪表板内容闪烁?

    c# - ASP.NET Core 2.0 认证中间件

    c# - 由于传递的数据过多而导致 WCF 服务调用失败?

    c# - 当您将 Int32 设置为等于 Int16 时,幕后会发生什么?