2011-09-29 2 views
7

웹 로직 서버에서 실행중인 Java 응용 프로그램이 있습니다. 응용 프로그램 외부 웹 서비스에 연결하기 위해 SSL을 사용하는 두 가지 모듈이 있습니다 - 축에 내장 - - 신뢰에게 Moudle B를 사용 -의 모듈 A와 모듈 B.동일한 JVM에서 다중 트러스트 스토어 설정

모듈 A는 가정 해 봅시다 봄-WS에 내장 - 트러스트를 사용 B.

모듈 A가 존재합니다. 모듈 B가 소개되고 있습니다.

어떤 모듈이 호출되는지에 따라 JVM에서 트러스트 스토어를 동적으로 설정할 수 있어야합니다.

일부 제약으로 인해 맞춤 키 관리자를 만들려면 옵션이 없습니다. - 하나의 트러스트 스토어 사용

Truststore를 설정하기 위해 System.setProperty im Module B 코드베이스를 사용하려고했습니다. 그러나 모듈 B가 먼저 호출 된 경우에만 작동합니다. 예를 들어 - 말하기 JVM을 새로 시작한 후 모듈을 호출합니다. JVM에서 자신의 truststore를 설정합니다. 다음 모듈 B를 호출합니다. 실패합니다. JVM에서 자신의 truststore를 설정하지 않습니다. 나는 System.setProperty 메서드를 사용했다.

내가 누락되었거나 System.setProperty가 기존 설정 값을 무시하지 않는다는 것입니다. 그렇다면 내 옵션은 무엇입니까?

+0

왜 두 개의 트러스트 스토어가 필요합니까? 트러스트 스토어는 피어 인증을 위해 신뢰할 수있는 CA 만 알려줍니다. 모듈별로 다른 이유는 무엇입니까? – EJP

+0

이것을 확인해 주시면 도움이 될 것입니다. http://stackoverflow.com/questions/1793979/registering-multiple-keystores-in-jvm/ – Raz

답변

14

런타임시 신뢰할 수있는 키 저장소를 동적으로로드 할 수 있습니다.

// load your key store as a stream and initialize a KeyStore 
InputStream trustStream = ...  
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());  

// if your store is password protected then declare it (it can be null however) 
char[] trustPassword = ... 

// load the stream to your store 
trustStore.load(trustStream, trustPassword); 

// initialize a trust manager factory with the trusted store 
TrustManagerFactory trustFactory = 
    TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());  
trustFactory.init(trustStore); 

// get the trust managers from the factory 
TrustManager[] trustManagers = trustFactory.getTrustManagers(); 

// initialize an ssl context to use these managers and set as default 
SSLContext sslContext = SSLContext.getInstance("SSL"); 
sslContext.init(null, trustManagers, null); 
SSLContext.setDefault(sslContext); 

SSLContext.getDefault() 당신이 새로운 하나를 만들 필요가 있도록 ,을 수정할 수 기본 문맥을 돌려 줄 것이기 때문에, 조심해, 그 다음 기본값으로이 새로운 컨텍스트를 설정 초기화합니다.

최종선은 입니다.은 원하는 경우 수의 트러스트 스토어를 사용할 수 있습니다.

관련 문제