2010-06-29 12 views
8

Tôi đã chơi với bảo mật trong Java và Tomcat và tôi đã đến mức mà tôi đã tò mò mà kho khóa/kho lưu trữ được nạp bởi JVM ở cuối. Mặc dù tôi đã tạo keystore của riêng mình và trong cấu hình Tomcat, điều này đã được sử dụng như keystore và trustore, thực tế là tệp cacerts mặc định đã được tải dưới dạng truststore (như kho khóa, tệp của tôi đã được sử dụng đúng cách).Lấy ví dụ về kho khóa mà JVM tải theo mặc định

Tôi đã cố lấy tên của tệp mà JVM tải, nhưng tôi chưa tìm thấy giải pháp. Ý tưởng của tôi là để có được System.getProperty ("javax.net.ssl.keyStore") nhưng điều này đã cho tôi null. Tôi đã cố gắng thiết lập điều này cả trong file server.xml của Tomcat thông qua Connector và như một tham số dòng lệnh -Djavax.net.ssl.keyStore = "file". Tôi chắc chắn rằng tham số dòng lệnh đã được cung cấp chính xác vì tôi đang đặt các paramneter JMX tại cùng một vị trí.

br, Martin

+0

Không có bất kỳ KeyStore mặc định nào. Có một truststore mặc định, nhưng tên của nó không có sẵn. – EJP

Trả lời

1

Bạn có trên Tomcat 6 không?

tôi đã cố gắng thiết lập này trong catalina.bat như

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Djavax.net.ssl.keyStore="path-to-file" 

và nó phản ánh trong mã của tôi sử dụng như System.getProperty("javax.net.ssl.keyStore")

Ngoài ra, để biết bạn, có một Bugzilla on SSL khác thuộc tính bị bỏ qua được sửa trong 6.0.16. keyStore không được đề cập cụ thể ở đó, nhưng phiên bản của tôi là 6.0.20 và nó hoạt động

+0

Phiên bản tôi đã thử là 6.0.26. Cách tôi thiết lập các tham số là đặt JAVA_OPTS trong setenv. (Sh | bat). – Martin

4

Bạn sẽ không nhất thiết có thể lấy chính xác thứ bạn muốn từ tên tệp ngay cả loại và đặt keystore trong trình kết nối hoàn toàn không ảnh hưởng đến thuộc tính hệ thống.

Ngoài ra, kho khóa, được chỉ định từ thuộc tính javax.net.ssl.keyStore hoặc được hiển thị rõ ràng chỉ là một phần của thiết lập của KeyManagerSSLContext. (Theo mặc định, Apache Tomcat sẽ sử dụng các tệp và cơ chế tải tương đối đơn giản, nhưng cũng có thể tùy chỉnh điều này bằng cách sử dụng SSLImplementation của Tomcat.) Nếu bạn thực sự muốn xem những gì đang được tải, tôi sẽ xem JSSE debugging flags, cụ thể hơn, như thế này:

-Djavax.net.debug=SSL,keymanager,trustmanager 

EDIT: tôi nên thêm rằng không có keystore mặc định nói chung (bên ngoài bối cảnh của Tomcat), chỉ có một truststore mặc định. Số JSSEImplementation của Tomcat sử dụng System.getProperty("user.home") + "/.keystore" theo mặc định.

+0

Một điều có thể gây nhầm lẫn trong Tomcat là tệp kho khóa được cấu hình bằng thuộc tính 'keystore' trong khi tệp tin truststore được cấu hình bằng thuộc tính' truststoreFile'. – Bruno

+0

Tôi đã có cấu hình được liệt kê dưới đây, nhưng chứng chỉ tin cậy được tải từ cacerts trong JRE/lib/security. keystoreFile = "conf/keystore.jks" truststoreFile = "conf/keystore.jks" – Martin

+0

Thử sử dụng 'keystore =' thay vì 'keystoreFile =' (nhưng giữ 'truststoreFile'). – Bruno