问题标签 [wsit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2817 浏览

java - 在具有自签名证书的 Web 服务上使用 WSIT 安全性 (Glassfish)

我使用本指南为 Metro 创建证书:http ://www.jroller.com/gmazza/entry/using_openssl_to_create_certificates

所以我现在有了 servicestore.jks 和 clientstore.jks。

当我检查密钥库时,我看到 servicestore.jks 中的 PrivateKeyEntry 是 myservicekey,trustedCertEntry 是 myclientkey。在 clientstore.jks 中反之亦然。

我在客户端 xml 和服务 wsit xml 中使用这些。我按照官方 WSIT 教程在 Netbeans 中执行此操作。一切都部署得很好。

因此,当测试来自客户端的方法调用时,我得到以下异常:

[#|2011-10-19T08:59:38.465+0200|INFO|glassfish3.1.1|com.sun.metro.policy|_ThreadID=81;_ThreadName=http-thread-pool-8080(1);|WSP5018: 已加载来自文件的 WSIT 配置:file:/opt/glassfish3/glassfish/domains/domain1/applications/testwebapp/WEB-INF/classes/META-INF/wsit-client.xml.|#]

[#|2011-10-19T08:59:41.167+0200|SEVERE|glassfish3.1.1|javax.enterprise.resource.xml.webservices.security|_ThreadID=84;_ThreadName=http-thread-pool-8080(4); |WSS1533: 验证自签名证书失败。|#]

[#|2011-10-19T08:59:41.171+0200|SEVERE|glassfish3.1.1|com.sun.xml.wss.provider.wsit|_ThreadID=84;_ThreadName=http-thread-pool-8080(4); |WSITPVD0035: 验证入站消息中的安全性时出错。com.sun.xml.wss.XWSSecurityException:自签名证书的验证在 com.sun.xml.wss.impl.misc.WSITProviderSecurityEnvironment.validateCertificate(WSITProviderSecurityEnvironment.java:937) 在 com.sun.xml.ws.security 失败。 opt.impl.incoming.X509BinarySecurityToken.validate(X509BinarySecurityToken.java:185) 在 com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.handleSecurityHeader(SecurityRecipient.java:396) 在 com.sun.xml。 ws.security.opt.impl.incoming.SecurityRecipient.cacheHeaders(SecurityRecipient.java:275) 在 com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient。

当我尝试在客户端 xml 中使用错误密码时,我得到了一个不同的异常,当我使用了错误的文件名时,我得到了一个找不到文件的异常。所以它至少找到了clientstore。

所以我认为服务密钥库可能有问题(我认为它可能使用了默认的 glassfish 而不是我自己的)并在 domain.xml 中找到了一些选项。所以我改变了这些:

-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=myservicekey -Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/servicestore.jks -Djavax.net.ssl.keyStorePassword=sspas -Djavax。 net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/servicestore.jks -Djavax.net.ssl.trustStorePassword=sspass -DSERVER_KEY_ALIAS=myservicekey -DCLIENT_KEY_ALIAS=myclientkey

但是当我重新启动服务器时,出现此异常并且无法登录管理控制台:

............. 原因:java.io.IOException: Keystore was tampered, or password is wrong at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:772) at sun .security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) at java.security.KeyStore.load(KeyStore.java:1214) at com.sun.enterprise.security.ssl.impl.SecuritySupportImpl.loadKS(SecuritySupportImpl .java:254) at com.sun.enterprise.security.ssl.impl.SecuritySupportImpl.loadStores(SecuritySupportImpl.java:208) ... 63 更多原因:java.security.UnrecoverableKeyException:sun.security 的密码验证失败。 provider.JavaKeyStore.engineLoad(JavaKeyStore.java:770) ... 67 更多

然后我在 WSIT 教程中阅读了以下内容: 为了在 Glassfish 上使用 WSIT 安全性,您必须将受信任的存储导入 GlassFish 的密钥库并从 NetBeans IDE 指定这些证书。

所以我不能使用自己的密钥库?更改 domain.xml 时我错过了什么吗?还是在整个 jvm 选项之前我出错了?

0 投票
1 回答
2323 浏览

java - SpNego:检测到有缺陷的令牌

我有一个连接到 WCF 服务的 java 客户端。该服务被配置为作为单独的域用户在主机上运行(即不作为本地服务或网络服务)。该服务在其 WSDL 中发布一个 userPrincipalName。

在 SpNego 令牌交换期间,我在客户端中收到以下异常

如果我将 WCF 服务配置为在本地系统帐户下运行,则 SpNego 令牌交换工作。我是否需要修改不在本地系统帐户下运行的服务的代码?

更新 1

通过让 C# 客户端与 WCF 服务连接进行一些调试后,我发现 C# 客户端正在使用名为MS-SPNG的 SpNego 协议的修改版本。Java 6 支持这个吗?当我检查令牌时,我收到有关不受支持的机制 1.2.840.113554.1.2.2.3 的错误。

0 投票
1 回答
290 浏览

java - Java STS 机制异常

我正在尝试实现使用不同安全机制的 Web 服务来进行一些性能测试并进行比较。我在 Glassfish 中使用 Java 和 Netbeans 7。我设法实现了所有的安全机制,但我在使用 STS 时遇到了麻烦。我正在按照本指南创建 STS,但在完成所有步骤并尝试运行项目后,我得到以下异常:

那是什么以及克服它的任何方法?谢谢。

0 投票
1 回答
3150 浏览

java - wsit-client.xml 不修改 wsdl?

我们需要调用一个 Web 服务,在一个 wsdl 和多个技术文档中进行了描述。

Web 服务提供商表示他们支持 OASIS(ws-security,http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf)。但是,我们从提供者那里收到的 wsdl 中没有提到这一点。

管理要求我们实现消息加密和签名。以前,这是使用轴和 wsdd 文件完成的。

我为 Web 服务创建了一个 jax-ws 客户端。现在,我想为其添加 ws-security。如果我理解正确,我需要编写一个 wsit-client.xml 文件。但是,我不确定是否需要在 wsdl 中引用它。如果可能的话,我不想改变它,所以如果我们得到一个新版本,我们就不需要改变它。这可能吗?

此外,我尝试使用 netbeans 生成 wsit-client.xml。我没有得到签名/加密的选项。是因为 wsdl 中没有提及任何政策吗?我们使用的是 Eclipse,所以我只使用 netbeans 进行快速测试。

0 投票
2 回答
1267 浏览

jax-ws - 多个 wsit-client.xml

我有一个 Web 应用程序,在其中部署了多个基于 jax-ws 的 Web 服务客户端。他们都需要自己的wsit-client。我有什么方法可以指定在实例化服务类时使用哪个 wsit-client.xml 文件?

我想通过将 wsit-client 文件打包到相应的 jar 文件中来为每个 webservices 客户端单独保存 wsit-client 文件。

0 投票
1 回答
1545 浏览

java - 使用自定义安全标头请求后,WSIT 不理解 SOAP 安全标头

我正在使用 Metro/WSIT 库编写 Java Web 服务客户端,而我需要访问的 Web 服务是 WCF 服务。(我几乎无法控制服务端和 WSDL。)

Web 服务使用传输级安全性 (SSL) 和使用安全令牌服务 (WS-Trust/WS-Security) 的联合安全模型来保护。我使用 Windows Identity Foundation 在 .NET 中轻松实现了客户端,首先发出安全令牌,然后使用 ( CreateChannelWithIssuedToken ) 方法向其他 Web 服务发出请求。

不过,使用 Metro/WSIT 时,我很难在 Java 中模仿这种行为。据我了解,由于 WSDL 中缺少 WS-Policy 信息,WSIT 不会启用与服务通信的安全处理。在发送请求之前,我通过操作 SOAP 请求标头来手动完成此操作,现在我收到的消息与我在 .NET 客户端收到的消息相同。

现在,我的问题是我收到以下错误:

因为 SOAP 响应在标头中有一个 Security 部分:

鉴于我无法修改 WSDL,有没有办法可以手动强制 Metro/WSIT 启用响应的安全处理,以免引发此异常?我不打算使用安全标头,并且响应的有效负载符合预期。我知道如果客户端不理解 mustunderstand="1" 的标头,我所看到的是正确的行为,但我正在寻找一种方法来抑制此异常。

我已经阅读了其他问题,例如这个问题,这似乎与我想要的很接近,但我还没有找到答案。任何建议/解决方案/等。不胜感激!

0 投票
0 回答
1295 浏览

jax-ws - 编写独立的 Java 客户端以使用 SAML2 令牌访问安全的 WCF Web 服务

我正在尝试使用普通 Java 客户端和 Metro Web 服务 API (webservices-rt-2.2.0-1) 访问在 .NET 平台上编写的安全 Windows Common Foundation (WCF) Web 服务

使用带有 ant 目标的 WCF Web 服务的 WSDL,我能够生成 Web 服务工件。

为了访问 WCF Web 服务,我需要在 SOAP 请求中插入一个 SAML2 令牌。此 SAML2 令牌是通过访问 REST 服务来检索的,该服务的响应包含 SAML2 断言。目前,我将令牌作为 String 对象(整个 Assertion XML)

此代码引发以下错误:WST0029:无法从 IssuedToken 或客户端获取 STS 位置

因此,我将代码修改为以下内容:

有了上述,STS位置错误消失了,但看到了以下错误。线程“主”javax.xml.ws.WebServiceException 中的异常:com.sun.xml.wss.jaxws.impl.SecurityClientTube.processRequest(SecurityClientTube.java:250) 处 com.sun.xml.ws 处的 java.lang.NullPointerException .api.pipe.Fiber.__doRun(Fiber.java:961) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910) 在 com.sun.xml.ws.api.pipe .Fiber.doRun(Fiber.java:873) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775) 在 com.sun.xml.ws.client.Stub.process(Stub .java:429) 在 com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:168) 在 com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119 ) 在 com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:

我打开了 SOAP 消息的日志记录并检查了请求,我发现请求中没有与安全相关的信息。Web 服务端点正在返回一个失败响应,指示请求中存在无效安全性。

我想知道: 1. 到目前为止,我与客户的关系是否正确?2. 调用我的 REST 服务并解析 SAML2 令牌的响应的最佳方式是什么?3. 如何将步骤 2 中的 SAML2 令牌全部设置到我的 Web 服务中?

根据 WCF Web 服务的实施者,他们使用的是 WS-Security 而不是联合安全性。收到的 SAML2 令牌如下所示:

我得到了几个 WSDL 文件。片段粘贴在下面:WSDL 1:

WSDL 2:

如果您需要更多信息,请告诉我。将不胜感激任何帮助。提前致谢!卡尔。

0 投票
1 回答
1707 浏览

java - 使用 Metro + WSIT 在服务端点检索明文 WS-Security 密码?

我正在编写一个 SOAP 服务(我们称之为 X),它充当某种“转发代理”,替换正文中的几个元素,然后调用另一个 SOAP 服务 (Y)。我想使用调用 Y 时在 X 中收到的相同 WS-Security 凭据(纯文本用户名和密码),但是在检索 Password 元素的值时遇到了问题。

我在wsit-package.service.xml文件中声明的策略引用了以下实现com.sun.xml.wss.impl.callback.PasswordValidationCallback.PasswordValidator

我可以在验证器中访问密码:

但是,由于验证器无权访问 WebServiceContext,因此我的服务端点无法方便地存储它。

使用其他标头,例如 WS-Addressing,我可以使用 Handler(的实现SOAPHandler<SOAPMessageContext>)来提取值,然后将它们放回应用程序范围下的上下文中,以便我的端点检索。在 SOAP 消息到达我的处理程序链时,WS-Security 标头已经被剥离,因此无法在处理程序中检索它们的值。

没有做一些激烈的事情,比如使用验证器将密码存储在数据库/全局映射/线程本地存储中,我有什么方法可以检索在我的端点提供的 WS-Security 密码?

我应该注意,我可以通过 访问端点上的 WS-Security 用户名信息Subject subj = SubjectAccessor.getRequesterSubject(context),但这似乎不包含密码。

0 投票
0 回答
405 浏览

java - 如何从 netbeans 中的给定 WSDL(在 Axis2 中创建)创建 Metro WSIT 客户端?

我有一个由 Axis 2 生成并声明安全策略的 WSDL 文件:

我按照 Metro 站点上的教程从 WSDL 中生成了 netbeans 中的 Web 服务客户端。该教程说要编辑 Web 服务属性以声明 KeyStore 等。但在我的情况下,我不能编辑任何安全选项,只有传输选项。

有人可以帮我解决这个问题吗?将 Axis2 用于客户端会更好吗?这有多难?对于安全通信,我们将使用密钥库。

WSDL 文件:

0 投票
0 回答
909 浏览

java - WSIT 配置文件加载次数过多

我在Glassfish (v3.0.1)应用服务器上部署了一个 Web 服务。今天,许多访问者(大约 300-400 人)访问了我们的网页,不幸的是我们的服务器宕机了。我们正在努力找出问题并尽快解决。

我们使用 SoapUI 进行的负载测试是成功的,但我们不明白问题出在哪里。我们计划为数万用户提供服务,因此只有 30 万用户应该没有任何问题。当我检查服务器日志时,我看到WSIT配置文件被加载了很多次(数千次甚至更多次)。我猜,每次用户访问时,都会加载这个文件。每次都加载它是正常的(并在服务器日志中看到数千次消息)还是应该只加载一次?即使它应该只加载一次,它是否会给服务器带来如此大的负担,以至于没有人可以登录页面?

这是日志中的完整消息:

对于服务器故障的原因,我将不胜感激任何其他建议。

我正在尝试编辑 Glassfish 设置。我更改了 JVM 设置并添加了以下行:

MaxPermSize=512m

Xmx35g

Xms32g

Dsun.net.client.defaultConnectTimeout=2

Dsun.net.client.defaultReadTimeout=10

另外,我已经更改了线程池设置,如下所示:

最大队列大小:4096

最大线程池大小:4000

最小线程池大小:64

空闲线程超时:900

是否可以有这样的配置来处理许多同时线程,或者我应该使用不同的自定义。我正在尝试优化 Glassfish 以处理许多线程。