我是否理解WCF服务可以设置为“传输安全”,+“证书身份验证”和 没有 安装了“客户端证书”客户端?
我的情景是:
我希望我的邮件通过SSL加密,这就是我选择“传输”方法的原因,我相信为什么我还需要服务器证书。
我已经进行了一次演练,它给了我以上所有内容但是必须安装客户端证书?如果我将这个Windows窗体应用程序发送给客户端,如果我被迫要求这样做,他们怎么能安装证书呢?看起来我在这里错过了一个重点,因为我认为将证书安装到用户机器上会是一个很大的问题。
PS。可能来自我reading here,我手头的任务过于复杂了吗?我是否只需要在我们的Web服务器中安装SSL证书,只需通过HTTPS访问WCF服务,并且可能只能使用basicHttpBinding?实际上不需要担心“证书身份验证”机制?
答案 0 :(得分:1)
您不需要客户端证书,它只是ssl。如果您使用IIS来托管服务,那么只需安装证书即可。消息级安全性有点棘手但你应该对ssl证书没问题。
如果您使用basicHttpBinding,则无需关闭身份验证,默认情况下,WSHttpBinding会启用消息级别身份验证,您可以通过将身份验证模式(我相信)设置为none来关闭Web配置。如果你只需要ssl,请使用basic。如果你想要ssl和Windows身份验证,那么请使用WSHttpBinding。
答案 1 :(得分:1)
正如约书亚所说,如果您要使用用户名来验证您的客户端,则不需要客户端证书。在这种情况下,客户端传递用户名和密码,服务器提供相互身份验证/握手过程的证书。
我刚刚为类似的系统设置了一个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>
希望有一些帮助,如果您有任何问题请告诉我。