我需要使用 java 客户端调用 Web 服务。 此服务通过消息级别的证书(Ws-Security,而不是 SSL)对客户端进行身份验证。
这应该是可能的,因为我可以使用 JAX-WS 生成具有相互证书安全性的 Web 服务 this dialog .
但我无法创建客户端。有人有想法吗?
最佳答案
我自己没有尝试过,而是来自http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/2.0/tutorial/doc/ :
使用 XWSS 配置消息安全性
应用程序服务器包含使用 XWS-Security 保护 JAX-WS 应用程序所需的所有 JAR 文件,但是,为了查看示例应用程序,您必须下载并安装独立的 Java WSDP bundle 。您可以从http://java.sun.com/webservices/downloads/webservicespack.html下载Java WSDP .
要使用 XWSS 将消息安全性添加到现有 JAX-WS 应用程序,请在客户端执行以下步骤:
创建客户端安全配置。客户端安全配置文件指定将用于客户端应用程序的消息安全操作的顺序和类型。例如,执行数字签名操作的简单安全配置如下所示:
<xwss:Sign id="s" includeTimestamp="true"> <xwss:X509Token encodingType="http://docs.oasis- open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" valueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss- x509-token-profile-1.0#X509SubjectKeyIdentifier" certificateAlias="xws-security-client" keyReferenceType="Identifier"/> </xwss:Sign> </xwss:SecurityConfiguration> </xwss:Service> <xwss:SecurityEnvironmentHandler> simple.client.SecurityEnvironmentHandler </xwss:SecurityEnvironmentHandler>
有关编写和理解安全配置以及设置 SecurityEnvironmentHandler 的更多信息,请参阅 Java Web Services Developer Pack 1.6 教程:http://java.sun.com/webservices/docs/1.6/tutorial/doc/index.html .
在您的客户端代码中,创建一个使用生成的安全配置进行初始化的 XWSSecurityConfiguration 对象。以下是您将在客户端文件中使用的代码示例。有关使用此代码的完整文件的示例,请查看\jaxws2.0\simple-doclit\src\simple\client\目录中的示例客户端。
FileInputStream f = new FileInputStream("./etc/client_security_config.xml"); XWSSecurityConfiguration config = SecurityConfigurationFactory.newXWSSecurityConfiguration(f);
使用
XWSSecurityConfiguration.MESSAGE_SECURITY_CONFIGURATION
属性在RequestContext
上设置安全配置信息。有关使用此代码的完整文件的示例,请查看\jaxws2.0\simple-doclit\src\simple\client\目录中的示例客户端。// put the security config info ((BindingProvider)stub).getRequestContext().put( XWSSecurityConfiguration.MESSAGE_SECURITY_CONFIGURATION, config);
像编写客户端一样调用 stub 上的方法,而不考虑添加 XWS-Security。\jaxws2.0\simple-doclit\src\simple\client\目录中的应用程序示例如下所示:
Holder<String> hold = new Holder("Hello !"); stub.ping(ticket, hold);
关于java - 如何调用具有消息安全和客户端证书认证的Web安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957106/