自从我们一直致力于项目开始以来,我一直假设我们能够构建一个WCF Web服务,该服务使用传输级别客户端证书和消息级别用户名密码进行双因素身份验证WS-Security。我们的计划是实现我们已经完成的消息级别身份验证,并在我们能够实现自己的证书颁发机构后添加客户端证书的要求。
消息级别身份验证在一段时间内运行良好,现在我们可以开始实现客户端证书了。我们已经生成了一个客户端证书,我们正在尝试在BizTalk中进行设置,这似乎只是让我们选择客户端证书或用户名。安全模式包括“无”,“传输”,“消息”,“使用消息凭据传输”和“仅传输凭据”。我选择带有消息凭证的传输,因为它似乎最接近我所追求的,但传输安全选项被禁用。
是否可以利用客户端证书和用户名/密码?
答案 0 :(得分:2)
我将添加另一个答案,只是为了保留在这个问题中不起作用的历史。
话虽这么说,我终于让它通过customBinding工作了。这次我检查了IIS是否需要客户端证书:)
它涉及在一个BizTalk应用程序的接收位置和另一个BizTalk应用程序的发送端口上创建自定义绑定,为什么?因为我们的项目涉及一个Biztalk应用程序发送给另一个。
所以,为了让一切顺利,我不得不:
接收位置(接收申请)
httpTransport
绑定元素,因为如果您不这样做,则无法添加需要的httpsTransport
元素security
元素。在这一点上,它看起来像这样(元素的顺序很重要)
security
元素有一个名为authenticationMode
的属性,该属性已切换为UserNameOverTransport。尽管名称如此,但这也是允许UserName与Message一起发送的。 security
中的其他所有内容都保留了默认值
httpsTransport
有一个名为requireClientCertificate
的属性,这个属性设置为“true”,其他所有内容都保留了默认值。
发送端口(发送应用程序)
这与接收几乎相同,但仅在发送端口而不是接收位置。
clientCredentials
的行为扩展,并在ClientCertificate元素中设置了以下值,这些值只获取了当前用户存储中的客户端证书,该服务帐户是您的发送端口以。
完成所有操作后,2个应用程序现在应该能够使用客户端证书和UserName身份验证相互通信。
请参阅我对这个问题的答案,了解这在非BizTalk WCF服务中的基本转换。 How to supply both UserName and Client Certificate in WCF client (why does this example work)?
不要忘记重启主机实例。
编辑 - 奖金如果您最终导出/部署到其他服务器,即使您单独导出和导入/安装Web目录,您可能会得到一个IIS,说它不能认为MyService / Myservice.svc的端点认为接收端口/位置已被禁用。但是,这是因为它现在是WCF-CustomIsolated。解决方案:打开已发布服务的.svc文件,并将Factory
属性从BasicHttpWebServiceHostFactory
更改为CustomWebServiceHostFactory
答案 1 :(得分:0)
客户端证书可以应用于使用WCF-BasicHttp适配器的发送端口的端点标识,这是安全性的传输层(Client Cert)。然后,在您附带的屏幕截图中显示的安全选项卡中,您提供了消息层安全性,即用户名/密码组合。
这是身份配置的屏幕截图。您需要填写顶部(服务标识)和底部(客户端标识)
编辑:这个答案不正确,我的设置有误并且“有效”但不是因为这个原因