【发布时间】:2015-04-04 09:16:23
【问题描述】:
我们正在开发的系统包含以下应用程序: - 一个 .Net WCF 安全令牌服务,可以发布 WSTrust 访问令牌。 - 公开简单 Ping 操作的 Java 服务。 - 调用 STS 以获取令牌然后使用它访问服务的 Java servlet。
.Net WCF STS 的要求: - 请求和响应的消息正文都必须签名。 - 没有加密。 - 必须有时间戳并且必须签名。 - 必须使用 https。
为了满足这些要求,我们制作了一个自定义 WCF Web 服务,其自定义绑定是:
var bindings = new BindingElementCollection();
var transportBinding = new HttpsTransportBindingElement { RequireClientCertificate = false };
var encodingBinding = new TextMessageEncodingBindingElement() { MessageVersion = MessageVersion.Soap12WSAddressing10 };
MessageSecurityVersion version =
MessageSecurityVersion
.WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
var sec = SecurityBindingElement.CreateMutualCertificateBindingElement(version) as AsymmetricSecurityBindingElement;
sec.MessageProtectionOrder = MessageProtectionOrder.EncryptBeforeSign;
bindings.Add(sec);
bindings.Add(encodingBinding);
bindings.Add(transportBinding);
服务主机初始化如下:
ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(IWSTrust13SyncContract),
new MyCustomBinding(), "/myendpoint");
endpoint.Contract.ProtectionLevel = ProtectionLevel.Sign;
到目前为止一切顺利。我们使用 .Net 客户端对其进行了测试,它运行良好。对于 Java 部分,结果并不是那么好。 到目前为止,我们已经完成的所有步骤是:
-
在Java服务中:编辑web服务属性:
- 使用“STS Issued Endorsing token”机制设置安全服务
- 设置 KeyStore 和 TrustStore
-
在 servlet 应用程序中
- 使用 Java 服务的 wsdl 添加 Web 服务客户端 -> 编辑 Web 服务属性
- 设置安全性:密钥库和信任库
设置安全令牌服务:端点、wsdl 位置、服务名称、端口名称、命名空间和 ws 信任版本
使用 STS 的 wsdl 添加 Web 服务客户端 -> 编辑 Web 服务属性
- 在“服务质量”选项卡中,只有“传输”部分。 “安全”部分不存在。 (1)
-
设置完以上所有选项后,检查文件夹“Src/java/META - INF”,如预期有 wsit-client.xml 和 2 个服务引用 xml 文件
- 我检查了在 xml 文件上生成的策略,对我来说一切正常,它与我们 STS 的 wsdl 具有相同的策略。详细来说,它有:
- 非对称绑定
- 签名部分
- 传输绑定
- …
- 最后一步是启动服务端口并调用如下操作 Service_Service 服务 = 新的 Service_Service(); 服务存根 = service.getServicePort(); return stub.ping();
我希望在发送到 STS 之前对邮件进行签名(包括标题和正文)。然而,实际上,发送给 STS 的消息是没有签名的。 STS 抛出错误: “必须对带有 '_1' id 的安全标头元素 'Timestamp' 进行签名”(2)
如果我们更改为使用 http 而不是 https 进行传输绑定,则对 STS 的请求消息已正确签名。但要求是使用https。
我们的问题是:
- (1):QoS 选项卡中没有安全部分是否正常?还是我们在这里做错了什么?
- (2):使用https时如何让Java对body和header的一些其他元素进行签名?
【问题讨论】:
标签: java c# web-services wcf wsdl