2011-09-29 27 views
7

Tôi có một ứng dụng Java đang chạy trên một máy chủ weblogic. Ứng dụng này có hai mô-đun riêng biệt mà sử dụng SSL để kết nối với các dịch vụ web bên ngoài - chúng ta hãy nói module A và module B.Đặt nhiều truststore trên cùng một JVM

Mô-đun A - Được xây dựng trên Axis - Sử dụng truststore Một Moudle B - Được xây dựng trên mùa xuân-ws - Sử dụng truststore B.

Mô-đun A hiện có. Mô-đun B đang được giới thiệu.

Tôi cần có khả năng đặt cửa hàng tin cậy động trong JVM dựa trên mô-đun nào đang được gọi.

Do một số ràng buộc, tôi không có tùy chọn - để tạo trình quản lý khóa tùy chỉnh. - sử dụng một cửa hàng ủy thác

Tôi đã cố gắng sử dụng codebase System.setProperty im Module B để đặt truststore. Tuy nhiên nó chỉ hoạt động nếu Module B được gọi trước. Ví dụ - Nói Tôi có một khởi động lại mới của JVM sau đó tôi gọi mô-đun A - nó đặt riêng của nó truststore trong JVM sau đó tôi gọi mô-đun B - Nó không thành công - nó không đặt nó là truststore riêng trong JVM mặc dù Tôi đã sử dụng phương pháp System.setProperty.

Tôi có thiếu gì đó hay không chỉ là System.setProperty không ghi đè các giá trị đã đặt hiện tại. Nếu vậy thì các lựa chọn của tôi ở đây là gì.

+0

Tại sao bạn cần hai truststores? Một truststore chỉ cho bạn biết CA nào bạn có thể tin cậy để xác thực peer. Tại sao điều đó sẽ khác nhau cho mỗi mô-đun? – EJP

+0

Vui lòng kiểm tra điều này, nó có thể giúp bạn: http://stackoverflow.com/questions/1793979/registering-multiple-keystores-in-jvm/ – Raz

Trả lời

14

Bạn có thể tải các cửa hàng khóa đáng tin cậy một cách linh hoạt khi chạy.

// 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); 

Coi chừng, bởi vì SSLContext.getDefault() sẽ cung cấp cho bạn phía sau mặc định bối cảnh mà bạn không thể sửa đổi, vì vậy bạn phải tạo một hình mới, khởi tạo sau đó nó thiết lập mới bối cảnh này làm mặc định.

Điểm mấu chốt là bạn có thể sử dụng bất kỳ số lượng cửa hàng ủy thác nào nếu bạn muốn.

Các vấn đề liên quan