2013-02-20 28 views
6

Tôi có một nhà máy SSL tùy chỉnh, nơi tôi tải kho tin cậy của riêng mình.Cách tải kho khóa, bên trong thư mục tài nguyên (maven)?

Bây giờ khi tôi đặt truststore.jks tập tin vào thư mục gốc của dự án, nó hoạt động với dòng sau:

ks.load(new FileInputStream("/truststore.jks", passphrase); 

Nhưng tôi muốn truststore của tôi bên trong thư mục tài nguyên của tôi, được xây dựng với maven nơi đường dẫn là src/main/resources.

Sau đó, tôi làm gì và nó không hoạt động với dòng sau:

ks.load(this.getClass().getResourcesAsStream("/truststore.jks"), passphrase); 

Mặc dù input stream tồn tại. Tôi đã kiểm tra nó. Nó chỉ thất bại khi tôi làm ks.load (...).

Trường hợp ngoại lệ mà tôi nhận được là:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 

Tại sao vậy?

Kính trọng, Dave

+0

một điều bạn có thể thử nghĩ đến. Chỉ định "/truststore.jks" trong getResourceAsStream của bạn để tìm kiếm từ gốc của đường dẫn lớp. –

+0

Tôi cũng đã thử điều đó, không có may mắn ... –

Trả lời

0

Strange, nó hoạt động ngay bây giờ ...

tôi đã

Properties systemProps = System.getProperties(); 
systemProps.put("javax.net.ssl.trustStore", "/truststore.jks"); 
systemProps.put("javax.net.ssl.trustStorePassword", "changeit"); 
System.setProperties(systemProps); 

và thay đổi dòng thứ hai để

systemProps.put("javax.net.ssl.trustStore", "src/main/resources/truststore.jks"); 

Bất cứ ai biết tại sao? Giải pháp này có được không?

+4

Điều này sẽ chỉ hoạt động trong môi trường phát triển địa phương của bạn. Khi bạn xây dựng artefact của mình, đường dẫn 'src/main/resources' sẽ không hợp lệ. – vegemite4me

+1

Vui lòng cập nhật câu hỏi ban đầu của bạn thay vì đăng câu hỏi mới làm câu trả lời –

+0

Giải pháp này không liên quan gì đến thực tế là cửa hàng tin cậy là tài nguyên. Câu trả lời của bạn (như đã nói trước tôi) chỉ hoạt động trong quá trình phát triển, vì vậy tôi không làm việc! –