2011-11-25 5 views
5

그래서 저는 wsdls와 함께 여기에 약간의 문제가있어서 java에서 여러 인증서를 선택하고 있습니다. 예를 들어, 스마트 카드에는 서명, 암호화, 식별을 위해 여러 개의 인증서가 있습니다. 나는이WSDL 클라이언트 인증 및 복수 인증서

System.setProperty("javax.net.ssl.keyStore", 
    keyStore); 
    System.setProperty("javax.net.ssl.keyStorePassword", 
    keyStorePassword); 

처럼이 tutorial 다음있어, 클라이언트 인증 연결을위한 코드를 생성하지만, 지금까지 내가 말할 수있는, 당신이 속성을 설정하여 WSDL에게 키 스토어에 대한 경로를주는 WSDL을 . 이제 스마트 카드와 같이 키 저장소에있는 여러 인증서의 경우 해당 스마트 카드에 사용할 인증서를 지정할 방법이 없기 때문에 문제가 발생합니다. wsdl이 키 스토어에서 첫 번째 인증서를 선택하는 것처럼 보입니다.이 인증서는 인증 할 인증서가 잘못되었을 수 있습니다.

내 질문은 2 배 :

  1. 방법이 사용하는 인증서 WSDL을 알려줄 수있는 System.setProperty하는 것보다 다른 있습니까? wsconsume을 사용하여 wsdl에서 대부분의 코드를 생성 한 이후로 어떤 인증서를 지정하려면 어떻게해야합니까?

  2. System.setProperty()에만 경로를 지정할 수 있습니다. 객체를 지정하는 방법이 있습니까? 스마트 카드에서 인증서를 얻는 방법은 SunPKCS11 클래스를 사용하는 것입니다 (찾을 수는 here). 그러나, 이것은 나에게 키 스토어 객체를 반환하고, 내가 아는 한 System.setProperty()은 경로를 원한다.

도움 주셔서 감사합니다.

답변

1

나는 내 질문에 대한 답을 찾았습니다. CXF를 사용하고 있음을 명심하십시오.

그래서 wsdl에서 wsdl2java를 호출하면 많은 코드가 생성됩니다. 특히 Authorization 및 AuthorizationService라는 이름의 승인을 처리하는 두 가지 요소가 있습니다. 내 코드에서 이러한 링크를 호출하기 위해, 나는이 시점에서

AuthorizationService authSvc = new AuthorizationService(); 
Authorization authWs = authSvc.getAuthorizationPort(); 

를 다음을 수행합니다, 당신이 선택한 인증서에서 새 키 스토어를 작성하여 자신의 KeyManager과의 트러스트를 구성해야합니다. 시작하는 좋은 장소는 this

그런 다음 당신이 그런 다음 HTTPConduit을 만들 TLSClientParameters

TLSClientParameters params = new TLSClientParameters(); 
params.setKeyManagers(keyManagers); 
params.setTrustManagers(trustManagers); 

를 구성 할 필요가있다.

HTTPConduit conduit = (HTTPConduit) ClientProxy.getClient(authWs).getConduit(); 
conduit.setTlsClientParameters(params); 

그리고 나서 사용자가 선택한 인증서로 웹 서비스를 사용할 수 있습니다.