我正在开发一个必须与Oracle WebLogic服务对话的WCF客户端。该服务强制执行相互证书身份验证。
但是,我们无法满足该策略,并且服务器会记录错误说明:
“WSM-00081:X.509证书未签名。”
我一直想知道这是什么意思。 Oracle文档声明:
WSM-00081:X.509证书未签名。
原因:未使用的X509令牌未根据证书身份验证方案的要求进行签名。
操作:对X509令牌(取决于所使用的参考机制)进行签名以进行证书身份验证。
等级:1
输入:ERROR
影响:安全
(http://docs.oracle.com/cd/E25054_01/core.1111/e10113/chapter_wsm_messages.htm)
经过一些研究,我们发现我们可以通过设置is-signed="false
来禁用服务政策配置文件中的检查:
<orasp:x509-token orasp:enc-key-ref-mech="direct" orasp:is-encrypted="false"
orasp:is-signed="false"
orasp:rcpt-enc-key-ref-mech="direct"
orasp:rcpt-sign-key-ref-mech="direct"
orasp:sign-key-ref-mech="direct"/>
我的两个理论:
我是否完全误解了这个主题,或者你们中的任何人都可以指出问题可能是什么以及如何解决?
答案 0 :(得分:0)
您需要在安全令牌中签名作为请求的一部分。
在配置的绑定元素中,将安全元素模式设置为SecurityMode.Message,将消息元素clientCredentialType设置为MessageCredentialType.Certificate:
<security mode="Message">
<message clientCredentialType="Certificate"
algorithmSuite="Default"
establishSecurityContext="true" />
</security>
接下来,创建端点行为以解析client certificate的位置:
<behavior name="endpointCredentialBehavior">
<clientCredentials>
<clientCertificate findValue="Contoso.com"
storeLocation="LocalMachine"
storeName="TrustedPeople"
x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>