Spring Web Services まとめ その8
WS-Securityの適用 (Chapter 7)
Spring-WSでは、作成したWebサービスに対しWS-Securityのアスペクトを追加できる。対応しているWS-Securityの領域は、以下の通り。
-
- Authentication(認証)
- Degital signatures(電子署名)
- Encryption and Decryption(暗号/復号化)
これらは全てXwsSecurityInterceptorを利用して実装されている。
XwsSecurityInterceptor
XwsSecurityInterceptorはその6で説明したEndpointInterceptorの実装クラスであり、内部の実装はSunのXML and web Services Security package(XWSS)をベースにしている。このため、XwsSecurityInterceptorを利用するためには、XWSSのセキュリティ・ポリシー・ファイルが必要となる。
セキュリティ・ポリシー・ファイルは、XwsSecurityInterceptorのBean定義時のpolicyConfigurationプロパティで指定する。また、XwsSecurityInterceptorのBean定義には、1つ以上のCallbackHandlerを指定する必要がある。このハンドラは、証明書/秘密鍵の取得や認証情報の検証などで利用される。以下は、XwsSecurityInterceptorの定義例である。
<beans> <bean id="wsSecurityInterceptor" class="org.springframework.ws.soap.security.xwss.XwsSecurityInterceptor"> <property name="policyConfiguration" value="classpath:securityPolicy.xml"/> <property name="callbackHandlers"> <list> <ref bean="certificateHandler"/> <ref bean="authenticationHandler"/> </list> </property> </bean> ... </beans>
キーストア
多くの暗号化処理には、java.security.KeyStoreオブジェクトが利用される。
Springでキーストアを利用する場合は、KeyStoreFactoryBeanが利用できる。以下は、KeyStoreFactoryBeanの定義例である。
<bean id="keyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean"> <property name="password" value="password"/> <!-- キーストアデータに対するチェックで利用 --> <property name="location" value="classpath:org/springframework/ws/soap/security/xwss/test-keystore.jks"/> </bean>
XwsSecurityInterceptorでキーストアを利用する場合は、KeyStoreCallbackHandlerの定義が必要となる。このハンドラには、キーストアを受け取るプロパティが3種類(keyStore、trustStore、symmetricStore)用意されており、ハンドラに行わせたい暗号化処理に合わせて正しいキーストアを指定する必要がある。以下は、ハンドラの暗号化処理と利用されるキーストアの関係を表した表である。
暗号化処理 | 利用されるキーストア |
---|---|
証明書の検証(Certificate validation) | keyStoreの次にtrustStoreの順 |
秘密鍵による復号化(Decryption based on private key) | keyStore |
対称鍵による復号化(Decryption based on symmetric key) | symmetricStore |
公開鍵証明書による暗号化(Encryption based on public key certificate) | trustStore |
対称鍵による暗号化(Encryption based on symmetric key) | symmetricStore |
署名(Signing) | keyStore |
電子署名の検証(Signature verification) | trustStore |
以下は、渡された証明書または電子署名を検証するためにtrustStoreを指定した例である。
<beans> <bean id="keyStoreHandler" class="org.springframework.ws.soap.security.xwss.callback.KeyStoreCallbackHandler"> <property name="trustStore" ref="trustStore"/> </bean> <bean id="trustStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean"> <property name="location" value="classpath:truststore.jks"/> <property name="password" value="changeit"/> </bean> </beans>
また以下は、渡された電子署名の復号化や返信メッセージの署名を行うためにkeyStoreを指定した例である。
<beans> <bean id="keyStoreHandler" class="org.springframework.ws.soap.security.xwss.callback.KeyStoreCallbackHandler"> <property name="keyStore" ref="keyStore"/> <property name="privateKeyPassword" value="changeit"/> </bean> <bean id="keyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean"> <property name="location" value="classpath:keystore.jks"/> <property name="password" value="changeit"/> </bean> </beans>