1

netbeans7とglassfish3.1.2を使用して開発されたjax-wsWebサービスがあります。対称鍵セキュリティとデフォルトの鍵ストアでユーザー名認証を使用するようにWebサービスを構成しました。ローカルホストでWebサービスをテストすると、すべてが正常に機能しますが、リモートテストサーバーに展開すると機能しませんでした。最初に例外が発生したKey used to decrypt EncryptedKey cannot be nullので、ローカルのkeystore.jksとcacerts.jksをリモートサーバーにアップロードしました。

今、私はそれらの例外を取得しています:

サーバ側:

WSITPVD0035: Error in Verifying Security in Inbound Message. com.sun.xml.wss.impl.PolicyViolationException: com.sun.xml.wss.impl.WssSoapFaultException: Invalid Security Header at 
com.sun.xml.wss.impl.policy.verifier.MessagePolicyVerifier.verifyPolicy(MessagePolicyVerifier.java:151) at 
com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.createMessage(SecurityRecipient.java:1003) at 
com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.validateMessage(SecurityRecipient.java:248) at 
com.sun.xml.wss.provider.wsit.WSITServerAuthContext.verifyInboundMessage(WSITServerAuthContext.java:588) at 
com.sun.xml.wss.provider.wsit.WSITServerAuthContext.validateRequest(WSITServerAuthContext.java:361) at 
com.sun.xml.wss.provider.wsit.WSITServerAuthContext.validateRequest(WSITServerAuthContext.java:264) at 
com.sun.enterprise.security.webservices.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:173) at 
com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:144) at 
com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:119) at 
com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:961) at 
com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910) at 
com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873) at 
com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775) at 
com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:386) at 
com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:640) at 
com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:263) at 
com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:163) at 
org.glassfish.webservices.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:120) at 
org.glassfish.webservices.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:91) at 
org.glassfish.webservices.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:200) at 
org.glassfish.webservices.EjbWebServiceServlet.service(EjbWebServiceServlet.java:131) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:770) at 
com.sun.grizzly.http.servlet.ServletAdapter$FilterChainImpl.doFilter(ServletAdapter.java:1059) at 
com.sun.grizzly.http.servlet.ServletAdapter$FilterChainImpl.invokeFilterChain(ServletAdapter.java:999) at 
com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:434) at 
com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:384) at 
com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179) at 
com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) at 
com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354) at 
com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) at 
com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849) at 
com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) at 
com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) at 
com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) at 
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at 
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at 
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at 
com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at 
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at 
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at 
com.sun.grizzly.ContextTask.run(ContextTask.java:71) at 
com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at 
com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at 
java.lang.Thread.run(Thread.java:662) Caused by: com.sun.xml.wss.impl.WssSoapFaultException: Invalid Security Header at 
com.sun.xml.ws.security.opt.impl.util.SOAPUtil.newSOAPFaultException(SOAPUtil.java:159) at 
com.sun.xml.wss.impl.policy.verifier.MessagePolicyVerifier.processSecondaryPolicy(MessagePolicyVerifier.java:220) at 
com.sun.xml.wss.impl.policy.verifier.MessagePolicyVerifier.verifyPolicy(MessagePolicyVerifier.java:144) ... 43 more

クライアント側:

Exception in thread "AWT-EventQueue-0" javax.xml.ws.soap.SOAPFaultException: Invalid Security Header
    at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:193)
    at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:126)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:123)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:93)
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:144)

どうすればこれを修正できますか?

ありがとう 。

4

2 に答える 2

0

スタックトレースは私にはなじみがないように見えますが、おそらくあなたの問題は証明書自体です。

証明書を作成するときは、「サーバー名」を設定する必要があります。これは、クライアントが証明書の「サーバー名」がURL「サーバー名」と一致するかどうかを確認するために使用されます。サーバー名が一致しない場合は、証明書が盗まれた可能性があるため、クライアントは接続を中止する必要があります!!!。詳細については、このチュートリアルを確認してください

Javaクライアントの例:クライアント検証用の証明書を作成すると、.'localhost'のようなURLを使用してWebサービスにアクセスする場合にのみ合格します'https://localhost/stuff...'。したがって、同じクライアントで同じアプリケーションにアクセスしようとしたが、のようなIPを使用する'https://10.0.0.1/stuff...'と、検証エラーが発生するはずです。

注:Java Webサービスクライアントのデフォルト構成はこのチェックを行いますが、このクライアント側の検証をバイパスしたい場合は、この投稿をチェックしてください

これがあなたが抱えている問題であるかどうかを確認してみてください。その場合、いくつかの解決策があります。

  • アプリケーションをデプロイするサーバーの証明書を作成します
  • クライアント側の検証を無効にする

PS:この種の問題を解決するために、サーバー側で特別なことをしたことはありません。正しい証明書をインストールするだけで十分です

于 2012-06-28T16:15:48.923 に答える
0

私の場合、問題は CommandMap にありました。CommandMap に "application/ciphervalue" ハンドラーを追加する必要があります。これは、WSIT が CVDataHandler クラスのロード中に一度だけ実行するためです。

追加方法の詳細については、com.sun.xml.ws.security.opt.impl.util.CVDataHandler 静的ブロックを参照してください。

于 2016-11-16T12:38:34.233 に答える