証明書で保護された Web サービスにアクセスしようとしています。セキュリティは IIS でセットアップされ、Web サービスはその背後にあります。
WS-SECURITY がこの種の認証を行うとは思えません。Web サービスを呼び出すときにクライアント証明書を渡す方法はありますか?
「このページにはクライアント証明書が必要です」という IIS エラー ページが表示されます。
CXF 2.1.4 を使用しています
証明書で保護された Web サービスにアクセスしようとしています。セキュリティは IIS でセットアップされ、Web サービスはその背後にあります。
WS-SECURITY がこの種の認証を行うとは思えません。Web サービスを呼び出すときにクライアント証明書を渡す方法はありますか?
「このページにはクライアント証明書が必要です」という IIS エラー ページが表示されます。
CXF 2.1.4 を使用しています
はい、これは CXF を使用して可能です。クライアント コンジットをセットアップする必要があります。IIS で Web サービスにアクセスできるようにする証明書を含むキーストアを指定できます。ここで使用している証明書が IIS で既知の許可されたクライアントである限り、問題ありません。
<http:conduit name="{http://apache.org/hello_world}HelloWorld.http-conduit">
<http:tlsClientParameters>
<sec:keyManagers keyPassword="password">
<sec:keyStore type="JKS" password="password"
file="src/test/java/org/apache/cxf/systest/http/resources/Morpit.jks"/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="password"
file="src/test/java/org/apache/cxf/systest/http/resources/Truststore.jks"/>
</sec:trustManagers>
...
</http:tlsClientParameters>
サンプル: CXF Wiki
上記の答えは正しいですが、それに加えて....
クライアント Bean は次のようになります (この SSL が正常に機能するため)。
<jaxws:client id="helloClient" serviceClass="demo.spring.HelloWorld" address="http://localhost:9002/HelloWorld" />
クライアント Bean を次のように定義すると、SSL は機能しません。
<bean id="proxyFactory"
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="demo.spring.HelloWorld"/>
<property name="address" value="http://localhost:9002/HelloWorld"/>
</bean>