フロントエンド開発チームに公開されているさまざまなWebサービスで構成されるWebアプリケーションがあります。私たちは小さなお店なので、セキュリティは私たちにとって決して心配されていませんが、それでもそれを実装する方法を知りたいです。
Netbeans 7.0.1、Glassfish 3.1.1 b12、およびSOAPを使用しています。Netbeansのウィザードを使用して基本的なセキュリティを構成し、それを機能させました。次に、トランスポートセキュリティを追加しようとし、WSDLファイルに追加されたことを確認しました。SSLを追加しようとすると、次のエラーが発生します。
サーバー側:
重大:WSS1601:セキュリティ要件が満たされていません-ポリシーでトランスポートバインディングが構成されていますが、着信メッセージがSSL対応ではありませんでした重大:WSITPVD0035:受信メッセージのセキュリティの検証中にエラーが発生しました。com.sun.xml.wss.impl.XWSSecurityRuntimeException:WSS1601:セキュリティ要件が満たされていません-トランスポートバインディングはポリシーで構成されていますが、着信メッセージはcom.sun.xml.wss.impl.policy.verifier.MessagePolicyVerifier.verifyPolicy( MessagePolicyVerifier.java:125)at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.createMessage(SecurityRecipient.java:983)at com.sun.xml.ws.security.opt.impl.incoming com.sun.xml.wss.provider.wsit.WSITServerAuthContext.verifyInboundMessage(WSITServerAuthContext.java:586)のSecurityRecipient.validateMessage(SecurityRecipient.java:232)(com.sun.xml.wss.provider)。
クライアント側:
09:36:16,464警告[org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor](http--127.0.0.1-443-1)リクエストにセキュリティヘッダーが含まれていませんが、障害です。09:36:16,467エラー[org.jboss.ejb3.invocation](http--127.0.0.1-443-1)JBAS014134:メソッドpublic java.util.Listcom.enginsol.ActivityEJBのコンポーネントActivityEJBでEJB呼び出しが失敗しました。 getActivities(int):javax.ejb.EJBException:javax.xml.ws.soap.SOAPFaultException:org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:166)[jboss-as-の無効なセキュリティヘッダーejb3-7.1.0.Final.jar:7.1.0.Final] at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:230)[jboss-as-ejb3-7.1.0.Final。 jar:7.1.0.Final] at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304)[jboss-as-ejb3-7.1.0.Final。jar:7.1.0.Final] at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:190)[jboss-as-ejb3-7.1.0.Final.jar:7.1.0.Final] org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final] at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor .processInvocation(CurrentInvocationContextInterceptor.java:41)[jboss-as-ejb3-7.1.0.Final.jar:7.1.0.Final] at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss- invocation-1.1.1.Final.jar:1.1.1.Final] at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59)[jboss-as-ejb3-7.1.0。 Final.jar:7。1.0.Final]org.jboss.invocation.InterceptorContextで。
各Webサービスは、sun-ejb-jar.xmlで基本的に同じ方法で保護されます。
<ejb>
<ejb-name>ActivityWS</ejb-name>
<webservice-endpoint>
<port-component-name>ActivityWS</port-component-name>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</webservice-endpoint>
</ejb>
キーストアの欠落とキーストアのパスワードの誤りに関連する起動エラーをクリアしたので、証明書のセットアップが正しく行われたと確信しています。また、最近追加されたRESTfulサービスは正常に機能します(ユーザー名/パスワードのダイアログボックスが表示され、SSLを介して実行されます)。クライアントとサーバーはどちらも元々Glassfishにデプロイされていましたが、Glassfishのバグを除外するために、サービスの小さなコンシューマーを作成してJBoss7.1にデプロイしました。
これは私たちがSOで見つけることができた最も近い答えであり、OPが出した答えは曖昧だったので、まだ解決策がありません。Java Glassfish-SSL Webサービスを利用する方法は?
アップデート:
私はジムによって投稿されたガイド(http://www.ryandelaplante.com/2007/06/ssl-and-http-basic-authentication-with.html)を読み、それに従い、セットアップを少し調整しました。sun-ejb-jarにセキュリティロールを追加し、Webサービスにアノテーションを許可するロールを追加しました(以前は、ロールはsun-application.xmlと別のejb-jar.xmlで処理されていました)。私たちのサービスはEJBエンドポイントであるため、ガイドの関連情報を確認しましたが、それでも同じエラーが発生します。