2011-01-18 2 views
4

Java 데스크톱 응용 프로그램을 개발 중이며이 응용 프로그램에서 웹 서비스를 사용하려고합니다. 웹 서비스는 binarysecuritytoken을 사용하여 메시지 수준 보안을 사용하는 양방향 SSL 연결이 필요합니다. NetBeans IDE 6.9.1을 JDK 1.6.0.23 및 JAX-WS를 ws 래퍼로 사용하고 있습니다. 클라이언트 컴퓨터에서 웹 서버를 사용하지 않고 어떻게 ws와 통신 할 수 있습니까? 내가 읽는 대부분의 것들은 클라이언트 컴퓨터에서 tomcat이나 다른 웹 서버를 가질 필요가 있습니다 (Tomcat에서 키 스토어를 구성하거나 그렇게 ...). 할 수 있습니까? 자바 데스크톱 애플리케이션을위한 SSL 기반 클라이언트에 대한 몇 가지 기사를 제안하십시오. JavaSE에서Java 응용 프로그램 및 SSL을 사용하는 웹 서비스 클라이언트

+1

간단하게 말하면, 내가 어떻게 BindingProvidor를 사용하여 SOAPHeader에 서명하는 어떤 J2EE 컨테이너 –

답변

3

소비 웹 서비스 - 당신이 서비스를 호출하기 전에 속성을 설정하는 NetBeans tutorial

사용 BindingProvider를 참조하십시오. 사용 예보기 BindingProviderhere

+0

를 사용하지 않고 SSL 보안 웹 서비스 소비를위한 J2SE 솔루션을 필요로 ?? JAX-WS가 생성 한 요청/포트에 서명 된 SOAPHeader를 추가하려고합니다. jaxws-rt에는 WSBindingProvider와 같은 BindingProvidor의 확장이 있지만 J2EE 컨테이너도 사용합니다. –

+0

웹 서비스가 WSDL을 게시 할 때 보안 설명자가 있습니다. 그런 다음 wsimport를 사용하여 WSDL 문서에서 클라이언트 측 이슈를 생성 한 다음 적절하게 구성합니다. Netbeans를 사용하여 여기 (http://netbeans.org/kb/docs/websvc/wsit.html) 간단한 튜토리얼 (조금 날짜가 있지만 개념이 모두 있습니다)이 있습니다. –

+0

위에서 언급 한 것은 메시지 수준 보안입니다. SSL로 포인트 - 투 - 포인트 보안을 원할 경우 http://www.java-tips.org/java-ee-tips/java-api-for-xml-web-services/using-jax를 참조하십시오. -ws-based-web-services-wit.html –

4

여기에 SSL을 통한 WS를 처리하는 두 가지 방법이 있습니다. http://ws.apache.org/xmlrpc/ssl.html.
올바른 방법은 SE 및 EE 솔루션에 키 저장소를 구성하고 사용하는 것입니다.
다음으로 빠른 솔루션은 나를 위해 작동 :

package client; 

import java.security.cert.X509Certificate; 

import javax.net.ssl.HostnameVerifier; 
import javax.net.ssl.HttpsURLConnection; 
import javax.net.ssl.SSLContext; 
import javax.net.ssl.SSLSession; 
import javax.net.ssl.TrustManager; 
import javax.net.ssl.X509TrustManager; 
import javax.xml.namespace.QName; 

import ws.MyService1; 
import ws.MyService1ServiceLocator; 

public class Client { 

    public static void main(String[] args) throws Exception { 
     test(); 
    } 

    public static void test() throws Exception { 
     // Create a trust manager that does not validate certificate chains 
     TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
      public X509Certificate[] getAcceptedIssuers() { 
       return null; 
      } 

      public void checkClientTrusted(X509Certificate[] certs, String authType) { 
       // Trust always 
      } 

      public void checkServerTrusted(X509Certificate[] certs, String authType) { 
       // Trust always 
      } 
     } }; 
     // Install the all-trusting trust manager 
     SSLContext sc = SSLContext.getInstance("SSL"); 
     // Create empty HostnameVerifier 
     HostnameVerifier hv = new HostnameVerifier() { 
      public boolean verify(String arg0, SSLSession arg1) { 
       return true; 
      } 
     }; 

     sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
     HttpsURLConnection.setDefaultHostnameVerifier(hv); 

     // use secured service 
     QName qname = new QName("http://ws", "MyService1Service"); 
     String url = "https://127.0.0.1:7002/MyService/wsdl/MyService1.wsdl"; 
     MyService1 service = new MyService1ServiceLocator(url, qname).getMyService1(); 
     System.out.println(service.getMessage()); 
    } 
} 
+2

이 솔루션은 제공되는 솔루션에서 즉시 알 수 없으므로 ws.Myservice1 및 ws.MyService1ServiceLocator가 구현 한 것과 관련된 몇 가지 세부 정보를 제공하여 향상 될 수 있습니다. –

+0

매우 유용합니다. thanks –

관련 문제