0

我是否正确理解可以使用“传输安全性”、“证书身份验证”设置 WCF 服务并且没有安装“客户端证书”客户端?

我的情况是:

  • 远程服务器上的 WCF 服务
  • Windows Forms 客户端可能向数百名用户发送(验证用户(针对 DB)并通过 WCF 服务方法执行操作)

我希望我的消息通过 SSL 加密,这就是我选择“传输”方法的原因,我相信为什么我还需要服务器证书。

我遵循了一个演练,它给了我以上所有内容,但包括安装客户端证书的必要性?如果我将此 Windows 窗体应用程序发送给客户,如果我被迫要求他们如何安装证书?似乎我在这里遗漏了一个重要点,因为我认为将证书安装到用户机器上将是一个很大的问题。

PS。可能从我在这里阅读的内容来看,我手头的任务是否过于复杂?我是否只需要在我们的 Web 服务器中安装 SSL 证书并通过 HTTPS 访问 WCF 服务,并且可能只需要使用 basicHttpBinding?实际上不需要担心“证书认证”机制?

4

2 回答 2

1

您不需要客户端证书,它只是 ssl。如果您使用 IIS 来托管服务,这很简单,只需安装证书即可。消息级别的安全性变得有点棘手,但你应该在 ssl 证书上没问题。

如果您使用 basicHttpBinding,则不需要关闭身份验证,默认情况下 WSHttpBinding 会打开消息级别身份验证,您可以通过将身份验证模式(我相信)设置为无,在 Web 配置中将其关闭。如果您只需要 ssl,请使用基本的。如果您想要 ssl 和 Windows 身份验证,请使用 WSHttpBinding。

于 2009-05-08T01:10:46.623 回答
1

正如 Joshua 所说,如果您要使用用户名来验证您的客户端,则不需要客户端证书。在这种情况下,客户端传递用户名和密码,服务器提供证书用于相互认证/握手过程。

我最近刚刚为一个类似的系统设置了一个 wcf 安全系统(通过 www 赢得表格),我使用了CodePlex的指导,它提供了一个分步检查列表,以帮助确保你准备好一切。您不必遵循每一步,例如我们没有使用角色功能,但我们使用的是会员商店。

下面是使用用户名和服务器证书使用 wsHttpBinding 进行设置/配置的简要总结:

客户端配置:

      <security mode="Message">
        <message clientCredentialType="UserName" negotiateServiceCredential="true"
          algorithmSuite="Default" establishSecurityContext="false" />
      </security>

在代理上设置的用户名密码:

'ClientCredentials added to service call for authentication
    objServiceClient.ClientCredentials.UserName.UserName = MyAppContext.Username
    objServiceClient.ClientCredentials.UserName.Password = MyAppContext.Password

服务器配置:

  • 捆绑:

            <wsHttpBinding>
            <binding name="MyApp.wsHttpBindingMessageUname">
                <security mode="Message">
                    <message clientCredentialType="UserName" negotiateServiceCredential="true"
                      establishSecurityContext="false" />
                </security>
            </binding>
            </wsHttpBinding>
    
  • 行为:

            <serviceBehaviors>
            <behavior name="MyApp.DefaultServiceBehavior">
                <serviceCredentials>
                    <serviceCertificate findValue="localhost" storeLocation="LocalMachine"
                     storeName="My" x509FindType="FindBySubjectName" />
                    <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
                     membershipProviderName="AspNetSqlMembershipProvider" />
                </serviceCredentials>
            </behavior>
        </serviceBehaviors>
    

希望对您有所帮助,如果您有任何问题,请告诉我。

于 2009-05-08T09:49:03.850 回答