我一直在尝试使用传输和邮件安全性以及共同证书身份验证为WCF服务创建基于Metro的客户端。
我让每个模式单独工作,而不是一起工作 - 即只有Message安全工作,body被加密并通过HTTP发送,或者只有SSL工作,消息没有加密。激活它们会使客户端通过SSL发送未加密的消息。
这是我目前的约束力:
<customBinding>
<binding name="customBind">
<transactionFlow />
<security authenticationMode="MutualCertificate" allowSerializedSigningTokenOnReply="true" defaultAlgorithmSuite="Basic128" includeTimestamp="true" securityHeaderLayout="Lax">
</security>
<textMessageEncoding messageVersion="Soap11" />
<httpsTransport requireClientCertificate="false"/>
<!--<httpTransport />-->
</binding>
</customBinding>
使用httpTransport,消息是加密的,使用httpsTransport,它们不是。服务器响应“验证消息安全性时发生错误。”,因为消息未加密。 Metro客户端失败,出现“com.sun.xml.wss.XWSSecurityException:未满足安全要求 - 消息中没有安全标头”。
之前有没有遇到过这个?任何关于为什么会发生这种情况的线索,或者我可以探索的可能的事情?附加信息:使用Netbeans 7.1.1和Metro 2.2。
答案 0 :(得分:2)
我设法通过从wsdl中删除TransportBinding元素来解决这个问题,并让Java处理传输安全性而不是Metro。