WS-Security是SOAP的扩展,用于通过XML签名和XML加密将安全性应用于Web服务。
使用 spring-ws 验证 SOAP 服务中的请求签名和签名响应
前提:我需要创建一个使用 WS-Security 标准的 SOAP 服务来执行标题中描述的操作,以便 SOAP 客户端可以使用该服务。 我有什么 肥皂服务已完成
我正在尝试使用 WSO2 Micro Integrator 自定义由使用 ws-security 策略(使用自定义 Rampart 配置)配置的代理服务返回的错误响应。例如,如果客户端发送
如何在不知道服务器证书的情况下使用 WS-SECURITY 通过 WCF 使用 Web 服务
为了创建一个使用 WCF 来使用实现 WS-SECURTY 的 Web 服务的 .Net 客户端,我创建了一个 CustomBinding,并向其中添加了三个元素: 非对称安全绑定元素
CXF 的 WS-security(用户名令牌) - 可以加密密码吗?
我正在尝试与 CXF 的 WS 安全实现(用户名令牌)结合在一起。我已经按照 http://cxf.apache.org/docs/ws-security.html 中所述完成了所有操作。我的PasswordCallbackHandler似乎是
如何在wss4j 1.6中验证没有密码的UsernameToken?
如果我发送具有当前结构的标头: 如果我发送具有当前结构的标头: <soapenv:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soapenv:mustUnderstand="1"> <wsse:UsernameToken wsu:Id="UsernameToken-E9505BCB2A7771EF1F14710742072404"> <wsse:Username>Not_correct_username</wsse:Username> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> 通过 processSecurityHeader 方法执行的验证是正确的。但我想仅通过用户名来验证用户。 现在我的CallbackHandler代码是: public class PWCallback implements CallbackHandler { private String user; private String password; private String alias; private String privateKeyPassword; @Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof WSPasswordCallback) { WSPasswordCallback pc = (WSPasswordCallback) callbacks[i]; if (pc.getUsage() == WSPasswordCallback.USERNAME_TOKEN) { if (!StringUtils.equals(user, pc.getIdentifier())) { throw new IOException("unknown user: " + pc.getIdentifier()); } pc.setPassword(password); } else { if (pc.getUsage() == WSPasswordCallback.SIGNATURE || pc.getUsage() == WSPasswordCallback.DECRYPT) { if (StringUtils.equals(pc.getIdentifier(), alias)) { pc.setPassword(privateKeyPassword); } else throw new IOException("unknown user: " + pc.getIdentifier()); } } } } } 我必须添加或删除什么? 您需要重写默认 UsernameTokenValidator 的“verifyUnknownPassword”方法来调用您的 CallbackHandler。
是否可以使用 PSHA1 (http://schemas.xmlsoap.org/ws/2005/02/trust/CK/PSHA1) 密钥来使用 XML 加密? 我有两个秘密并使用它们生成 PSHA1 密钥字符串,但是失败并显示:
我无法在 PHP 中发出加密的 SOAP 请求。 根据文档,我对支付网关的每个请求进行了加密。我生成了 CSR 并将其发送给证书颁发机构...
尝试使用服务器的 PrivateKey 和 TrustedCert 的密钥库条目为 Web 服务客户端实现 WSS。 出站请求的拦截器代码如下所示。 // 传出
WCF 客户端无法验证 Java Web 服务。找不到 X509SecurityToken 的令牌验证器
我创建了集成Java WS的WCF客户端。这个想法很简单。我应该使用客户端的证书签署我的请求,服务器应该返回签名的响应。由服务器私钥签名...
我需要在 Jmeter 中放置一个测试 SOAP。该测试由 Jmeter 元素“SOAP Message Signer”进行签名。 我签署时间戳、正文和二进制安全令牌。 当我发送测试时,该测试发送得很好,但我不是......
我正在尝试将 UsernameToken wss 标头添加到我的 ws 客户端。 客户端实现 javax.xml.ws.Service 并已通过 WSDL2Java CFX 3.1.4 生成 由于 wsdl 包含 我正在尝试将 UsernameToken wss 标头添加到我的 ws 客户端。 客户端实现了 javax.xml.ws.Service 并已通过 WSDL2Java CFX 3.1.4 生成 由于 wsdl 包含 <wsp:Policy xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" wsu:Id="UsernameTokenPolicy"> <sp:UsernameToken> <wsp:Policy> <sp:WssUsernameToken10/> <sp:HashPassword/> </wsp:Policy> </sp:UsernameToken> </wsp:Policy> 必须添加 Usernametoken 标头。搜索了一下,我发现这很简单 ((BindingProvider)soapClient).getRequestContext().put("ws-security.username", usr); ((BindingProvider)soapClient).getRequestContext().put("ws-security.password", psw); 顺便说一下,当我尝试执行呼叫时,出现以下错误: These policy alternatives can not be satisfied: {http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}UsernameToken: Password hashing policy not enforced 有什么建议吗? 谢谢你。 附注我已经在堆栈溢出中检查过类似的帖子,但是如果我尝试像here建议的那样采用不同的方法,我会得到一个不同的错误: Interceptor for XXXX has thrown exception, unwinding now org.apache.cxf.ws.policy.PolicyException: No username available 如cxf-文档所述 从 Apache CXF 3.1.0 开始,WS-SecurityPolicy 和 XML 安全性 CXF 中的 (JAX-RS) 组件共享一组通用的配置标签。 所以你不应该使用ws-security.username和ws-security.password,而应该使用security.username和security.password 还要确保 cxf-rt-ws-policy 和 cxf-rt-ws-security 模块在类路径上可用,以便 ws-policy 将自动启用,从而负责对密码进行哈希处理,即计算正确的密码摘要。
处理标头时发现错误 顺便说一句,这是一个 WS-Security 问题... 我看不出我的 WS 端点有任何问题(除了它在
如何为 Weblogic 实现具有签名正文和时间戳的 Web 服务客户端
我正在尝试为启用了 WSS(签名正文和时间戳)的 Web 服务实现一个简单的 Web 服务客户端。这是 WSS 政策: 我正在尝试为启用了 WSS(签名正文和时间戳)的 Web 服务实现一个简单的 Web 服务客户端。这是 WSS 政策: <wsp:Policy wsu:Id="SignatureRequired" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"> <wsp:ExactlyOne> <wsp:All> <sp:AsymmetricBinding> <wsp:Policy> <sp:InitiatorToken> <wsp:Policy> <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> <wsp:Policy> <sp:WssX509V3Token10 /> </wsp:Policy> </sp:X509Token> </wsp:Policy> </sp:InitiatorToken> <sp:RecipientToken> <wsp:Policy> <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToInitiator"> <wsp:Policy> <sp:WssX509V3Token10 /> </wsp:Policy> </sp:X509Token> </wsp:Policy> </sp:RecipientToken> <sp:AlgorithmSuite> <wsp:Policy> <sp:TripleDesRsa15/> </wsp:Policy> </sp:AlgorithmSuite> <sp:Layout> <wsp:Policy> <sp:Strict /> </wsp:Policy> </sp:Layout> <sp:IncludeTimestamp /> </wsp:Policy> </sp:AsymmetricBinding> <sp:SignedParts> <sp:Body /> </sp:SignedParts> </wsp:All> </wsp:ExactlyOne> </wsp:Policy> 客户端实现基于 Oracle 文档中的示例:http://docs.oracle.com/cd/E24329_01/web.1211/e24488/message.htm#WSSOV273 Web 服务在 Weblogic 12c (12.1.2) 和 Oracle Java 1.7.0_25 上运行 package com.example.testclient.mtom; import weblogic.jws.jaxws.ClientPolicyFeature; import weblogic.jws.jaxws.policy.InputStreamPolicySource; import weblogic.security.SSL.TrustManager; import weblogic.xml.crypto.wss.api.Timestamp; import weblogic.xml.crypto.wss.api.WSSecurityFactory; import weblogic.xml.crypto.wss.provider.CredentialProvider; import weblogic.xml.crypto.wss.WSSecurityContext; import weblogic.wsee.security.bst.ClientBSTCredentialProvider; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.xml.namespace.QName; import javax.xml.ws.BindingProvider; import javax.xml.ws.soap.MTOMFeature; import org.apache.commons.lang.RandomStringUtils; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.ArrayList; import java.util.Map; import java.io.FileInputStream; import java.io.InputStream; import java.security.cert.X509Certificate; import com.example.attachment.TestWebServiceAttachment_Service; import com.example.attachment.TestWebServiceAttachment; public class TestWebServiceAttachmentClient { public TestWebServiceAttachmentClient() { // TODO Auto-generated constructor stub } public static void main(String[] args) throws Throwable { String username = "User"; String password = "Pass"; String clientCertFile = "src/main/resources/User.jks"; QName operationName = new QName("http://www.example.com/ws/attachment", "fileUpload"); MTOMFeature mtomFeature = new MTOMFeature(); InputStream is = new FileInputStream("src/main/resources/my-wssp1.1-signature-required.xml"); ClientPolicyFeature clientPolicyFeature = new ClientPolicyFeature(); clientPolicyFeature.setEffectivePolicyForOperation(operationName, new InputStreamPolicySource(is)); TestWebServiceAttachment_Service service = new TestWebServiceAttachment_Service(); TestWebServiceAttachment port = service.getTestWebServiceAttachmentPort(clientPolicyFeature, mtomFeature); //create credential provider and set it to the Stub List credProviders = new ArrayList(); //client side BinarySecurityToken credential provider -- x509 CredentialProvider cp = new ClientBSTCredentialProvider(clientCertFile, password, username, password); credProviders.add(cp); Date date = new Date(); Calendar created = Calendar.getInstance(); created.setTime(date); Calendar expired = Calendar.getInstance(); expired.setTime(date); expired.set(Calendar.HOUR_OF_DAY, created.get(Calendar.HOUR_OF_DAY) + 1); Timestamp timestamp = WSSecurityFactory.newTimestamp("TS-" + RandomStringUtils.randomNumeric(34), created, expired); Map<String, Object> requestContext = ((BindingProvider) port).getRequestContext(); requestContext.put(WSSConstants.TIMESTAMP_ELEMENT, timestamp); requestContext.put(WSSecurityContext.CREDENTIAL_PROVIDER_LIST, credProviders); requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://myserver:7001/ws/TestWebServiceAttachment/1.0"); requestContext.put(WSSecurityContext.TRUST_MANAGER, new TrustManager() { public boolean certificateCallback(X509Certificate[] chain, int validateErr) { // need to validate if the server cert can be trusted return true; } }); DataHandler dh = new DataHandler(new FileDataSource("src/main/resources/file1.pdf")); long response = port.fileUpload("file1.pdf", dh); System.out.println("response = " + response); } } 问题在于时间戳。我不知道如何正确地将时间戳签名添加到 WSS 上下文中。有谁知道如何实现这样的客户端?我收到以下异常: Exception in thread "main" com.sun.xml.ws.fault.ServerSOAPFaultException: Client received SOAP Fault from server: Timestamp validation failed. Please see the server log to find more detail regarding exact cause of the failure. at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:193) at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:125) at com.sun.xml.ws.client.sei.StubHandler.readResponse(StubHandler.java:253) at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:181) at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:258) at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:117) at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:91) at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:154) at com.sun.proxy.$Proxy37.fileUpload(Unknown Source) 我知道我的答案可能对你不再有用,但可能对其他人有帮助。 Weblogic 时间戳验证假定相应字段位于 UTC 时区。检查您的日期时间字段是否采用 UTC。 当没有时间戳字段或时间戳字段不正确时,服务器会显示 Timestamp validation failed 消息。您可以通过将以下行添加到代码中来查看您的原始 SOAP 请求: System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true"); System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true"); System.setProperty("com.sun.xml.ws.transport.http.HttpAdapter.dump", "true"); System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dump". "true");
cxf 服务的自定义拦截器以允许 spring security 身份验证
我在我的应用程序中使用 Spring Security 进行身份验证,现在我正在使用 cxf 公开 Web 服务,并且我想使用 Spring Security 来验证当前的 Web 服务调用。但我需要加入...
我即将开发一个 Windows 应用程序,需要使用 Web 服务安全性与 Axis2 Web 服务进行通信 - 所有文档都说,SOAP 安全通信是
使用soapUI测试WS安全性 - 在消息负载中使用安全标头
我是 Web 服务和 WS Security 的新手。 我有一个使用 CFX 拦截器的示例 Web 服务。以下是我的配置文件。 Cfx-servelet.xml: ...
我有点脱离了自己的舒适区。我正在尝试使用 PHP 创建 SOAP 请求,并且使用著名的 KBO API,以下是文档: https://economie.fgov.be/sites/default/files/Fi...
如何确定 InclusiveNamespaces 元素的 PrefixList 属性的值
签署 SOAP 请求时,我应该如何确定需要在 InclusiveNamespaces 元素的 PrefixList 属性中列出哪些值? 我正在努力确保我所设定的...
我正在尝试使用 WSSecurityCert 使用节点肥皂来使用 SOAP 服务。该服务要求我设置时间戳,使 SOAP 请求的有效期为 5 分钟并且 wsu pref...
我正在尝试在SoapUI中发出SOAP请求,该请求需要使用用户名和密码进行身份验证。我让 SoapUI 基于 wsdl 文件生成测试并尝试调用该服务。我遵循了...